トップページ > 記事閲覧
オセロを作る
名前:FFGX 日時: 2020/04/13 15:39

このプログラムでオセロを作りたいのですが 52行目で例外がスローされましたとなります。 visualstudio2019で dxライブラリVersion3.21です 初心者なので分かりやすく教えてください。 #include<DxLib.h> #define PX 60 #define O 8 int T[4]; int initialtrun, trun; int B[8][2] = { {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, }; int cx, cy, bx1, by1, bx2, by2; int mx1[64], my1[64], mx2[64], my2[64]; int f[O][O] = { {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,1,2,0,0,0}, {0,0,0,2,1,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0} }; bool flag = false; void P() { int w = GetColor(255, 255, 255); for (int y = 0; y < O; y++) { for (int x = 0; x < O; x++) { DrawExtendGraph(x * PX, y * PX, x * PX + PX, y * PX + PX, T[f[y][x]], false); } } DrawBox(480, 0, 640, 480, w, true); } void stone_check() { int c; for (int y = 0; y < O; y++) { for (int x = 0; x < O; x++) { if (f[y][x] == 2) { mx1[c] = x; my1[c] = y; c++; } if (f[y][x] == 1) { mx2[c] = x;ここで例外がスローされましたとなります。 my2[c] = y; c++; } } } for (int t = 0; t < c; t++) { if (initialtrun == 0) { for (int i = 0; i < O; i++) { switch (f[mx2[t] + B[i][0]][my2[t] + B[i][1]]) { case 1: case 2: case 3: break; default: f[mx2[t] + B[i][0]][my2[t] + B[i][1]] = 3; break; } } } else { for (int i = 0; i < O; i++) { switch (f[mx1[t] + B[i][0]][my1[t] + B[i][1]]) { case 1: case 2: case 3: break; default: f[mx1[t] + B[i][0]][my1[t] + B[i][1]] = 3; break; } } } } } void trun_set() { while (!ProcessMessage()) { if (CheckHitKey(KEY_INPUT_F)) { flag = true; initialtrun = 0; P(); break; } else if (CheckHitKey(KEY_INPUT_B)) { flag = true; initialtrun = 1; P(); break; } } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { SetOutApplicationLogValidFlag(false); SetWindowText("リバーシ"); ChangeWindowMode(true); DxLib_Init(); LoadDivGraph("madia\\a.png", 4, 4, 1, 60, 60, T, false); P(); int b = GetColor(0, 0, 0); DrawString(480, 0, "先手ならF後手ならB", b); trun_set(); stone_check(); P(); WaitKey(); DxLib_End(); return 0; } 助けてください。
メンテ

Page: 1 |

Re: オセロを作る ( No.1 )
名前:はるかぜ 日時:2020/04/13 15:48

int c; // ←cが初期化されないまま使用されているので「int c = 0;」にすればいいと思います。 for (int y = 0; y < O; y++) { for (int x = 0; x < O; x++) { if (f[y][x] == 2) { mx1[c] = x; my1[c] = y; c++; } if (f[y][x] == 1) { mx2[c] = x; my2[c] = y; c++; } } } ここしか見てないし実行もしてないので他に問題があるわかりませんがDXライブラリ以前にC言語の基礎の話なのでそっちから勉強したほうがいいかもしれないです 。
メンテ
Re: オセロを作る ( No.2 )
名前:FFGX 日時:2020/04/13 18:39

ここで例外がスローされましたはなくなりましたが 僕的には 0は石がない 1は白 2は黒 3はおける場所で 先手なら {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,3,0,0,0,0}, {0,0,3,1,2,0,0,0}, {0,0,0,2,1,3,0,0}, {0,0,0,0,3,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0} 後手なら {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,3,0,0,0}, {0,0,0,1,2,3,0,0}, {0,0,3,2,1,0,0,0}, {0,0,0,3,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0} このようになってほしいわけです
メンテ
Re: オセロを作る ( No.3 )
名前:FFGX(解決) 日時:2020/04/16 06:50

この動画を参考に作ります オセロを小一時間で作ってみた【プログラミング実況】Programming Reversi
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存