lang
1コード 2#include <iostream> 3#include <curses.h> 4#include <cstdio> 5using namespace std; 6int ban[111]={0};//8*8マスをゲームには使用,横軸9マス目は改行場所 7int dir[]={-10,-9,-8,-1,1,8,9,10};//1次元配列だから8方向への距離 8int turn=1,put=0;//自分は1、相手は2 9int check();//ひっくり返せるコマ数をチェック 10int main(){ 11 initscr();//スクリーンの初期化 12 noecho();//キー入力した文字を表示しないモード 13 keypad(stdscr,TRUE);//カーソルキーを有効化 14 int key;//ASCII コード(1バイトの数値,0x00 〜 0xFF) だけでは表わしきれない程に多数ある特殊キーにも 番号(4バイトの数値,0x00000100 〜 0xFFFFFFFF)が割り当てられているから 15 16 int x,y; 17 //int koma[4]={-,o,x,\n};//この配列は使わないがルール確認のため。(-)は何も置いてない、(o)は自分のコマ,(x)は敵のコマ 18 ban[30]=ban[40]=1;//自分の初期コマ(o)の配置 19 ban[31]=ban[39]=2;//敵の初期コマ(x)の配置 20 for(int i=8;i<=72;i+=9){//改行地 21 ban[i]=3; 22 } 23 24 for(int j=0;j<72;j++){ 25 if(ban[j]==0)printw("-"); 26 else if(ban[j]==1)printw("o"); 27 else if(ban[j]==2)printw("x"); 28 else if(ban[j]==3)printw("\n"); 29 } 30 31 for(int i=0;;i++){//すべての盤面にコマを置くまで続ける 32 if(turn==1){//自分のターンだったら 33 x=0; 34 y=0; 35 move(y,x); 36 while(1){//十時キーでの置き場移動(curses) Enterで位置確 37 key=getch();//十字キーの入力 38 if(key=='\n')break; 39 switch (key){ 40 case KEY_UP: y--; break;//上へ 41 case KEY_DOWN: y++; break;//下へ 42 case KEY_LEFT: x--; break;//左へ 43 case KEY_RIGHT: x++; break;//右へ 44 } 45 move(y,x); 46 refresh();//スクリーンのリフレッシュ 47 } 48 put=((y+1)*9)-x;//置いた位置(Enterで決定した位置) 49 check(); 50 }else{ 51 put++;//COMの置く場所を決める(banの0番地から順番に見ていき置ける場所に置くという雑魚) 52 check(); 53 } 54 if(i==100)break;//ここはとりあえず適当です。 55 } 56} 57 58int check(){ 59 int cnt=0; 60 int line=0; 61 int tasu=0; 62 if(ban[put]==0){//置ける可能性あり(何も置いてなかった) 63 for(int i=0;i<8;i++){//全方向を調べる 64 cnt=0; 65 tasu=0; 66 for(line=put+dir[i];ban[line]==3-turn/*敵のコマがある間*/;line+=dir[i]){//条件に3-turnと入れておけば相手の駒か自分の駒かがわかる 67 cnt++;//相手のコマの枚数をカウント 68 } 69 if(cnt>=1 && ban[line]==turn){//間にコマが一枚以上存在し、その上端が自分のコマだったら 70 for(int j=0;j<cnt;j++){//実際にひっくり返す 71 ban[put+tasu]=turn; 72 tasu+=dir[i]; 73 } 74 } 75 } 76 } 77} 78
現在高校生です。 簡単な人対コンピュータのプログラムをC++とcursesをつかい書いております。
添付コードのように書いたのですが、盤面とcursesによるカーソル移動はできるもののEnterを押し置く場所の決定をしても、(0,0)にカーソルが移動し何も動作しません。
どうしたらよいでしょうか?
ちなみに参考とさせていただいてるウェブページのリンクをはっておきます。 回答の方よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。