<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 興趣愛好 > 學下棋 > 五子棋 > 如何用c語言做五子棋

        如何用c語言做五子棋

        時間: 雪花750 分享

        如何用c語言做五子棋

          五子棋主要流行于華人和漢字文化圈的國家以及歐美一些地區,是世界上最古老的棋。下面學習啦小編給你介紹如何用c語言做五子棋,歡迎閱讀。

          用c語言做五子棋的方法

          五子棋游戲是一款很經典的智力游戲,只有學過編程語言的人,把五子棋的編程原理弄懂了,就能用自己熟悉的語言實現出來。

        五子棋C語言代碼如下

          #include

          #include

          #include

          #include

          #include

          #define CROSSRU 0xbf /*右上角點*/

          #define CROSSLU 0xda /*左上角點*/

          #define CROSSLD 0xc0 /*左下角點*/

          #define CROSSRD 0xd9 /*右下角點*/

          #define CROSSL 0xc3 /*左邊*/

          #define CROSSR 0xb4 /*右邊*/

          #define CROSSU 0xc2 /*上邊*/

          #define CROSSD 0xc1 /*下邊*/

          #define CROSS 0xc5 /*十字交叉點*/

          /*定義棋盤左上角點在屏幕上的位置*/

          #define MAPXOFT 5

          #define MAPYOFT 2

          /*定義1號玩家的操作鍵鍵碼*/

          #define PLAY1UP 0x1157/*上移--'W'*/

          #define PLAY1DOWN 0x1f53/*下移--'S'*/

          #define PLAY1LEFT 0x1e41/*左移--'A'*/

          #define PLAY1RIGHT 0x2044/*右移--'D'*/

          #define PLAY1DO 0x3920/*落子--空格鍵*/

          /*定義2號玩家的操作鍵鍵碼*/

          #define PLAY2UP 0x4800/*上移--方向鍵up*/

          #define PLAY2DOWN 0x5000/*下移--方向鍵down*/

          #define PLAY2LEFT 0x4b00/*左移--方向鍵left*/

          #define PLAY2RIGHT 0x4d00/*右移--方向鍵right*/

          #define PLAY2DO 0x1c0d/*落子--回車鍵Enter*/

          /*若想在游戲中途退出, 可按 Esc 鍵*/

          #define ESCAPE 0x011b

          /*定義棋盤上交叉點的狀態, 即該點有無棋子 */

          /*若有棋子, 還應能指出是哪個玩家的棋子 */

          #define CHESSNULL 0 /*沒有棋子*/

          #define CHESS1 'O'/*一號玩家的棋子*/

          #define CHESS2 'X'/*二號玩家的棋子*/

          /*定義按鍵類別*/

          #define KEYEXIT 0/*退出鍵*/

          #define KEYFALLCHESS 1/*落子鍵*/

          #define KEYMOVECURSOR 2/*光標移動鍵*/

          #define KEYINVALID 3/*無效鍵*/

          /*定義符號常量: 真, 假 --- 真為1, 假為0 */

          #define TRUE 1

          #define FALSE 0

          /**********************************************************/

          /* 定義數據結構 */

          /*棋盤交叉點坐標的數據結構*/

          struct point

          {

          int x,y;

          };

          /**********************************************************/

          /*自定義函數原型說明 */

          void Init(void);

          int GetKey(void);

          int CheckKey(int press);

          int ChangeOrder(void);

          int ChessGo(int Order,struct point Cursor);

          void DoError(void);

          void DoOK(void);

          void DoWin(int Order);

          void MoveCursor(int Order,int press);

          void DrawCross(int x,int y);

          void DrawMap(void);

          int JudgeWin(int Order,struct point Cursor);

          int JudgeWinLine(int Order,struct point Cursor,int direction);

          void ShowOrderMsg(int Order);

          void EndGame(void);

          /**********************************************************/

          /**********************************************************/

          /* 定義全局變量 */

          int gPlayOrder; /*指示當前行棋方 */

          struct point gCursor; /*光標在棋盤上的位置 */

          char gChessBoard[19][19];/*用于記錄棋盤上各點的狀態*/

          /**********************************************************/

          /**********************************************************/

          /*主函數*/

          void main()

          {

          int press;

          int bOutWhile=FALSE;/*退出循環標志*/

          printf("Welcome www.schoolhacker.com");

          Init();/*初始化圖象,數據*/

          while(1)

          {

          press=GetKey();/*獲取用戶的按鍵值*/

          switch(CheckKey(press))/*判斷按鍵類別*/

          {

          /*是退出鍵*/

          case KEYEXIT:

          clrscr();/*清屏*/

          bOutWhile = TRUE;

          break;

          /*是落子鍵*/

          case KEYFALLCHESS:

          if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/

          DoError();/*落子錯誤*/

          else

          {

          DoOK();/*落子正確*/

          /*如果當前行棋方贏棋*/

          if(JudgeWin(gPlayOrder,gCursor)==TRUE)

          {

          DoWin(gPlayOrder);

          bOutWhile = TRUE;/*退出循環標志置為真*/

          }

          /*否則*/

          else

          /*交換行棋方*/

          ChangeOrder();

          ShowOrderMsg(gPlayOrder);

          }

          break;

          /*是光標移動鍵*/

          case KEYMOVECURSOR:

          MoveCursor(gPlayOrder,press);

          break;

          /*是無效鍵*/

          case KEYINVALID:

          break;

          }

          if(bOutWhile==TRUE)

          break;

          }

          /*游戲結束*/

          EndGame();

          }

          /**********************************************************/

          /*界面初始化,數據初始化*/

          void Init(void)

          {

          int i,j;

          char *Msg[]=

          {

          "Player1 key:",

          " UP----w",

          " DOWN--s",

          " LEFT--a",

          " RIGHT-d",

          " DO----space",

          "",

          "Player2 key:",

          " UP----up",

          " DOWN--down",

          " LEFT--left",

          " RIGHT-right",

          " DO----ENTER",

          "",

          "exit game:",

          " ESC",

          NULL,

          };

          /* 先手方為1號玩家 */

          gPlayOrder = CHESS1;

          /* 棋盤數據清零, 即棋盤上各點開始的時候都沒有棋子 */

          for(i=0;i<19;i++)

          for(j=0;j<19;j++)

          gChessBoard[i][j]=CHESSNULL;

          /*光標初始位置*/

          gCursor.x=gCursor.y=0;

          /*畫棋盤*/

          textmode(C40);

          DrawMap();

          /*顯示操作鍵說明*/

          i=0;

          textcolor(BROWN);

          while(Msg[i]!=NULL)

          {

          gotoxy(25,3+i);

          cputs(Msg[i]);

          i++;

          }

          /*顯示當前行棋方*/

          ShowOrderMsg(gPlayOrder);

          /*光標移至棋盤的左上角點處*/

          gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

          }

          /*畫棋盤*/

          void DrawMap(void)

          {

          int i,j;

          clrscr();

          for(i=0;i<19;i++)

          for(j=0;j<19;j++)

          DrawCross(i,j);

          }

          /*畫棋盤上的交叉點*/

          void DrawCross(int x,int y)

          {

          gotoxy(x+MAPXOFT,y+MAPYOFT);

          /*交叉點上是一號玩家的棋子*/

          if(gChessBoard[x][y]==CHESS1)

          {

          textcolor(LIGHTBLUE);

          putch(CHESS1);

          return;

          }

          /*交叉點上是二號玩家的棋子*/

          if(gChessBoard[x][y]==CHESS2)

          {

          textcolor(LIGHTBLUE);

          putch(CHESS2);

          return;

          }

          textcolor(GREEN);

          /*左上角交叉點*/

          if(x==0&&y==0)

          {

          putch(CROSSLU);

          return;

          }

          /*左下角交叉點*/

          if(x==0&&y==18)

          {

          putch(CROSSLD);

          return;

          }

          /*右上角交叉點*/

          if(x==18&&y==0)

          {

          putch(CROSSRU);

          return;

          }

          /*右下角交叉點*/

          if(x==18&&y==18)

          {

          putch(CROSSRD);

          return;

          }

          /*左邊界交叉點*/

          if(x==0)

          {

          putch(CROSSL);

          return;

          }

          /*右邊界交叉點*/

          if(x==18)

          {

          putch(CROSSR);

          return;

          }

          /*上邊界交叉點*/

          if(y==0)

          {

          putch(CROSSU);

          return;

          }

          /*下邊界交叉點*/

          if(y==18)

          {

          putch(CROSSD);

          return;

          }

          /*棋盤中間的交叉點*/

          putch(CROSS);

          }

          /*交換行棋方*/

          int ChangeOrder(void)

          {

          if(gPlayOrder==CHESS1)

          gPlayOrder=CHESS2;

          else

          gPlayOrder=CHESS1;

          return(gPlayOrder);

          }

          /*獲取按鍵值*/

          int GetKey(void)

          {

          char lowbyte;

          int press;

          while (bioskey(1) == 0)

          ;/*如果用戶沒有按鍵,空循環*/

          press=bioskey(0);

          lowbyte=press&0xff;

          press=press&0xff00 + toupper(lowbyte);

          return(press);

          }

          /*落子錯誤處理*/

          void DoError(void)

          {

          sound(1200);

          delay(50);

          nosound();

          }

          /*贏棋處理*/

          void DoWin(int Order)

          {

          sound(1500);delay(100);

          sound(0); delay(50);

          sound(800); delay(100);

          sound(0); delay(50);

          sound(1500);delay(100);

          sound(0); delay(50);

          sound(800); delay(100);

          sound(0); delay(50);

          nosound();

          textcolor(RED+BLINK);

          gotoxy(25,20);

          if(Order==CHESS1)

          cputs("PLAYER1 WIN!");

          else

          cputs("PLAYER2 WIN!");

          gotoxy(25,21);

          cputs(" \<^+^>/");

          getch();

          }

          /*走棋*/

          int ChessGo(int Order,struct point Cursor)

          {

          /*判斷交叉點上有無棋子*/

          if(gChessBoard[Cursor.x][Cursor.y]==CHESSNULL)

          {

          /*若沒有棋子, 則可以落子*/

          gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);

          textcolor(LIGHTBLUE);

          putch(Order);

          gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);

          gChessBoard[Cursor.x][Cursor.y]=Order;

          return TRUE;

          }

          else

          return FALSE;

          }

          /*判斷當前行棋方落子后是否贏棋*/

          int JudgeWin(int Order,struct point Cursor)

          {

          int i;

          for(i=0;i<4;i++)

          /*判斷在指定方向上是否有連續5個行棋方的棋子*/

          if(JudgeWinLine(Order,Cursor,i))

          return TRUE;

          return FALSE;

          }

          /*判斷在指定方向上是否有連續5個行棋方的棋子*/

          int JudgeWinLine(int Order,struct point Cursor,int direction)

          {

          int i;

          struct point pos,dpos;

          const int testnum = 5;

          int count;

          switch(direction)

          {

          case 0:/*在水平方向*/

          pos.x=Cursor.x-(testnum-1);

          pos.y=Cursor.y;

          dpos.x=1;

          dpos.y=0;

          break;

          case 1:/*在垂直方向*/

          pos.x=Cursor.x;

          pos.y=Cursor.y-(testnum-1);

          dpos.x=0;

          dpos.y=1;

          break;

          case 2:/*在左下至右上的斜方向*/

          pos.x=Cursor.x-(testnum-1);

          pos.y=Cursor.y+(testnum-1);

          dpos.x=1;

          dpos.y=-1;

          break;

          case 3:/*在左上至右下的斜方向*/

          pos.x=Cursor.x-(testnum-1);

          pos.y=Cursor.y-(testnum-1);

          dpos.x=1;

          dpos.y=1;

          break;

          }

          count=0;

          for(i=0;i

          {

          if(pos.x>=0&&pos.x<=18&&pos.y>=0&&pos.y<=18)

          {

          if(gChessBoard[pos.x][pos.y]==Order)

          {

          count++;

          if(count>=testnum)

          return TRUE;

          }

          else

          count=0;

          }

          pos.x+=dpos.x;

          pos.y+=dpos.y;

          }

          return FALSE;

          }

          /*移動光標*/

          void MoveCursor(int Order,int press)

          {

          switch(press)

          {

          case PLAY1UP:

          if(Order==CHESS1&&gCursor.y>0)

          gCursor.y--;

          break;

          case PLAY1DOWN:

          if(Order==CHESS1&&gCursor.y<18)

          gCursor.y++;

          break;

          case PLAY1LEFT:

          if(Order==CHESS1&&gCursor.x>0)

          gCursor.x--;

          break;

          case PLAY1RIGHT:

          if(Order==CHESS1&&gCursor.x<18)

          gCursor.x++;

          break;

          case PLAY2UP:

          if(Order==CHESS2&&gCursor.y>0)

          gCursor.y--;

          break;

          case PLAY2DOWN:

          if(Order==CHESS2&&gCursor.y<18)

          gCursor.y++;

          break;

          case PLAY2LEFT:

          if(Order==CHESS2&&gCursor.x>0)

          gCursor.x--;

          break;

          case PLAY2RIGHT:

          if(Order==CHESS2&&gCursor.x<18)

          gCursor.x++;

          break;

          }

          gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

          }

          /*游戲結束處理*/

          void EndGame(void)

          {

          textmode(C80);

          }

          /*顯示當前行棋方*/

          void ShowOrderMsg(int Order)

          {

          gotoxy(6,MAPYOFT+20);

          textcolor(LIGHTRED);

          if(Order==CHESS1)

          cputs("Player1 go!");

          else

          cputs("Player2 go!");

          gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

          }

          /*落子正確處理*/

          void DoOK(void)

          {

          sound(500);

          delay(70);

          sound(600);

          delay(50);

          sound(1000);

          delay(100);

          nosound();

          }

          /*檢查用戶的按鍵類別*/

          int CheckKey(int press)

          {

          if(press==ESCAPE)

          return KEYEXIT;/*是退出鍵*/

          else

          if

          ( ( press==PLAY1DO && gPlayOrder==CHESS1) ||

          ( press==PLAY2DO && gPlayOrder==CHESS2)

          )

          return KEYFALLCHESS;/*是落子鍵*/

          else

          if

          ( press==PLAY1UP || press==PLAY1DOWN ||

          press==PLAY1LEFT || press==PLAY1RIGHT ||

          press==PLAY2UP || press==PLAY2DOWN ||

          press==PLAY2LEFT || press==PLAY2RIGHT

          )

          return KEYMOVECURSOR;/*是光標移動鍵*/

          else

          return KEYINVALID;/*按鍵無效*/

          }


        看了“如何用c語言做五子棋 ”的人還看了:

        1.五子棋必勝開局技巧

        2.五子棋如何入門

        3.五子棋六種布陣方法介紹

        4.五子棋開局大全 26種開局方法

        5.競技五子棋

        646557 主站蜘蛛池模板: 国产午夜福利视频第三区| 欧美综合婷婷欧美综合五月| 亚洲精品男男一区二区| 99福利一区二区视频| 欧美成人午夜在线观看视频| 亚洲精品第一区二区三区| 无码专区中文字幕无码| 日韩丝袜亚洲国产欧美一区 | 国产农村妇女高潮大叫| 亚洲激情国产一区二区三区| 亚洲精品成人片在线观看精品字幕| 国产熟女老阿姨毛片看爽爽| 免费人成视频网站在线观看18| 亚洲AV成人无码久久精品四虎| 亚洲午夜激情久久加勒比| 亚洲欧美高清在线精品一区二区| 成年女人碰碰碰视频播放| 国产综合色产在线视频欧美| 无码成人一区二区三区| 男人的天堂av一二三区| 中文字幕日韩有码av| 国产在线拍偷自揄拍精品| 欧美性猛交xxxx免费视频软件| 国产亚洲女人久久久精品| 超薄肉色丝袜一区二区| 亚洲一本大道在线| 亚洲一区二区中文av| 五月天国产成人av免费观看| 久久精品午夜视频| 午夜久久水蜜桃一区二区| 国产成人精品一区二区无| 久久精品夜色国产亚洲av| 国产日韩一区二区四季| 免费无码黄十八禁网站| 亚洲欧美一区二区成人片| 久久aaaa片一区二区| 亚洲欧美精品一中文字幕| 日韩区二区三区中文字幕| 在线一区二区中文字幕| 视频一区视频二区在线视频| 免费午夜无码片在线观看影院|