99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用C語(yǔ)言實(shí)現(xiàn)中國(guó)象棋項(xiàng)目

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2021-11-19 10:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)——《中國(guó)象棋項(xiàng)目》,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下!

游戲介紹:

中國(guó)象棋是由兩人輪流走子,在戰(zhàn)法上遵循古代孫子兵法中的“不戰(zhàn)而屈人之兵,善之善者也”的作戰(zhàn)思想,以“將死”或“困斃”對(duì)方將(帥)為勝的一種二人對(duì)抗性游戲。對(duì)局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一招,直至分出勝、負(fù)、和,對(duì)局即終了。在棋戰(zhàn)中,人們可以從攻與防、虛與實(shí)、整體與局部等復(fù)雜關(guān)系的變化中提升思維能力。

每種棋子的行棋規(guī)則大家如果有不懂的地方,可以去了解一下,都很簡(jiǎn)單。你想要做出本項(xiàng)目,了解規(guī)則是必不可少的。

本項(xiàng)目編譯環(huán)境:VS2019/VS2013;

插件:圖形庫(kù)插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)取;

效果圖展示

配套講解教程:中國(guó)象棋游戲教程——嗶哩嗶哩

源代碼示例:

#include#include#define INTERVAL 50  //前面的間隔#define CHESS_GRID_SIZE 70  //格子寬度#define ROW  10#define COL  9enum PIECES//枚舉棋子{  車(chē),馬,象,士,將,砲,卒,  俥,馬,相,仕,帥,炮,兵,  SPACE,BEGIN,END};//紅黑方棋子、int redChess[] = { 車(chē), 馬, 象, 士, 將, 砲, 卒};int blackChess[] = { 俥, 馬, 相, 仕, 帥, 炮, 兵 };const char*chessName[] = { "車(chē)", "馬", "象", "士", "將", "砲", "卒", "俥", "馬", "相", "仕", "帥", "炮", "兵" };struct Chess//棋子屬性{  int x;  int y;  int id;//哪個(gè)棋子  int type;//是哪一方的棋子 紅,黑?  bool river;//判斷小兵是否過(guò)了河};struct Chess  map[ROW][COL];//結(jié)構(gòu)體數(shù)組,用來(lái)保存每一個(gè)點(diǎn)的信息POINT begin = { -1, -1 }, end = { -1, -1 };//保存前后兩次點(diǎn)擊的數(shù)組下標(biāo)int state = BEGIN;//初始化游戲數(shù)據(jù)void GameInit(){  for (int i = 0; i < ROW; i++)  {    for (int k = 0; k < COL; k++)    {      int chessname = SPACE;      int mcolor = BLACK;      //黑棋      if (i <= 4)      {        mcolor = BLACK;        //初始化第一行的棋子,        if (i == 0)        {          if (k <= 4)          {            chessname = blackChess[k];          }          else          {            chessname = blackChess[8-k];          }        }        //設(shè)置炮        if (i == 2 && (k == 1 || k == 7))        {          chessname = blackChess[砲];        }        //設(shè)置小兵        if (i == 3 && k % 2 == 0)        {          chessname = blackChess[卒];        }
      }      //紅棋      else       {        mcolor = RED;        //初始化第一行的棋子,        if (i == 9)        {          if (k <= 4)          {            chessname = redChess[k];          }          else          {            chessname = redChess[8 - k];          }        }        //設(shè)置炮        if (i == 7 && (k == 1 || k == 7))        {          chessname = redChess[炮];        }        //設(shè)置小兵        if (i == 6 && k % 2 == 0)        {          chessname = redChess[兵];        }      }      map[i][k].id = chessname;      map[i][k].river = false;      map[i][k].type = mcolor;      map[i][k].x = k*CHESS_GRID_SIZE + INTERVAL;      map[i][k].y = i*CHESS_GRID_SIZE + INTERVAL;    }  }}//游戲的繪制函數(shù)void GameDraw(){  //設(shè)置背景顏色 red black   setbkcolor(RGB(252, 215, 162));  cleardevice();
  //繪制棋盤(pán)  setlinecolor(BLACK);  setlinestyle(PS_SOLID, 2);  for (int i = 0; i < 10; i++)  {    //畫(huà)橫線    line(INTERVAL, i*CHESS_GRID_SIZE + INTERVAL, 8 * CHESS_GRID_SIZE + INTERVAL, i*CHESS_GRID_SIZE + INTERVAL);    //畫(huà)豎線    if (i < 9)    {      line(i*CHESS_GRID_SIZE + INTERVAL, INTERVAL, i*CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE + INTERVAL);    }  }  rectangle(INTERVAL - 5, INTERVAL - 5, 8 * CHESS_GRID_SIZE + INTERVAL+5, 5+9 * CHESS_GRID_SIZE + INTERVAL);  //楚河漢界顯示  setfillcolor(RGB(252, 215, 162));  fillrectangle(INTERVAL, 4 * CHESS_GRID_SIZE + INTERVAL, 8 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL);  //顯示文字  char river[20] = "楚河        漢界";  settextstyle(50, 0, "楷體");  settextcolor(BLACK);  setbkmode(TRANSPARENT);  outtextxy(INTERVAL+100, 4 * CHESS_GRID_SIZE + INTERVAL+10, river);  //畫(huà)九宮格    //畫(huà)上面  line(3 * CHESS_GRID_SIZE + INTERVAL, INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, 2 * CHESS_GRID_SIZE + INTERVAL);  line(3 * CHESS_GRID_SIZE + INTERVAL, 2 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, INTERVAL);     //畫(huà)下面  line(3 * CHESS_GRID_SIZE + INTERVAL, 7 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE + INTERVAL);  line(3 * CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE+INTERVAL,5*CHESS_GRID_SIZE+INTERVAL,7*CHESS_GRID_SIZE+INTERVAL);  //畫(huà)棋子  settextstyle(30, 0, "楷體");  for (int i = 0; i < ROW; i++)  {    for (int k = 0; k < COL; k++)    {      if (map[i][k].id != SPACE)      {        setlinecolor(map[i][k].type);        fillcircle(map[i][k].x, map[i][k].y, 30);        fillcircle(map[i][k].x, map[i][k].y, 25);        settextcolor(map[i][k].type);        outtextxy(map[i][k].x-10, map[i][k].y-10, chessName[map[i][k].id]);      }          }  }}void MouseControl(){  if (MouseHit())  {    MOUSEMSG msg = GetMouseMsg();    if (msg.uMsg == WM_LBUTTONDOWN)    {      //獲取鼠標(biāo)點(diǎn)擊的數(shù)組的下標(biāo)      int row = (msg.y-INTERVAL)/CHESS_GRID_SIZE;      int col = (msg.x-INTERVAL)/CHESS_GRID_SIZE;      if (state == BEGIN)      {        state = END;        begin.x = row;        begin.y = col;      }      else if (state == END)      {        state = BEGIN;        begin.x = row;        begin.y = col;      }      printf("%d,%d  %d
", row, col, state);    }  }}void chessMove(){  if (begin.x != -1 && end.x != -1 && !(begin.x == end.x &&begin.y == end.y))  {    map[end.x][end.y].id = map[begin.x][begin.y].id;    map[end.x][end.y].type = map[begin.x][begin.y].type;    map[end.x][end.y].river = map[begin.x][begin.y].river;    map[begin.x][begin.y].id = SPACE;  }
}int main555(){    //創(chuàng)建一個(gè)圖形窗口  initgraph(800,800,SHOWCONSOLE);  GameInit();  printf("歡迎來(lái)到頑石老師課堂,中國(guó)象棋");  BeginBatchDraw();  while (1)  {    GameDraw();    FlushBatchDraw();    MouseControl();    chessMove();  }  return 0;}

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141759
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70743

原文標(biāo)題:C語(yǔ)言項(xiàng)目實(shí)戰(zhàn):《中國(guó)象棋》零基礎(chǔ)項(xiàng)目!210 行源代碼示例

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)C語(yǔ)言實(shí)例(350+例)

    350+單片機(jī)C語(yǔ)言實(shí)例! 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 05-22 21:47

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?1150次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    SAP實(shí)施專家解答:如何用DeepSeek-R1實(shí)現(xiàn)需求溝通效率倍增

    工博科技分享AI工具鏈在IT項(xiàng)目中的深度應(yīng)用:通過(guò)DeepSeek-R1實(shí)現(xiàn)智能會(huì)議記錄結(jié)構(gòu)化(2小時(shí)會(huì)議5分鐘生成決策表)和精準(zhǔn)多語(yǔ)言文檔翻譯(錯(cuò)誤率降低14%),幫助IT團(tuán)隊(duì)將重復(fù)性工作耗時(shí)減少
    的頭像 發(fā)表于 04-28 09:13 ?251次閱讀

    為什么學(xué)了C語(yǔ)言,卻寫(xiě)不出像樣的項(xiàng)目?

    在學(xué)習(xí)編程的路上,C語(yǔ)言幾乎是每個(gè)程序員的“必修課”。不管你是打算從事嵌入式開(kāi)發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語(yǔ)言都是一塊重要的基石。然而許多人在學(xué)習(xí)
    的頭像 發(fā)表于 03-14 17:37 ?439次閱讀
    為什么學(xué)了<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>,卻寫(xiě)不出像樣的<b class='flag-5'>項(xiàng)目</b>?

    單片機(jī)C語(yǔ)言編程寶典大全,初學(xué)必備【強(qiáng)推下載!】

    資料介紹:包含 1. 51單片機(jī)入門(mén)教程 2. 初學(xué)者適用:?jiǎn)纹瑱C(jī)C語(yǔ)言實(shí)例100例(代碼及釋義) 3. 51單片機(jī)C語(yǔ)言快速上手 4. 51單片機(jī)
    發(fā)表于 03-14 11:03

    限時(shí)免積分下載:增量式與位置式PID算法的C語(yǔ)言實(shí)現(xiàn)分享

    前面咱們有分享對(duì)PID算法離散化和增量式PID算法原理進(jìn)行來(lái)探索,之后又使用Matlab進(jìn)行了仿真實(shí)驗(yàn),對(duì)PID三個(gè)參數(shù)又有了更深入的認(rèn)識(shí),接下來(lái)我們來(lái)使用C語(yǔ)言進(jìn)行PID算法實(shí)現(xiàn),并且結(jié)合控制電機(jī)的
    發(fā)表于 03-05 18:32

    PID控制算法的C語(yǔ)言實(shí)現(xiàn):PID算法原理

    在工業(yè)應(yīng)用中 PID 及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無(wú)愧的萬(wàn)能算法,如果能夠熟練掌握 PID 算法的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,對(duì)于一般的研發(fā)人員來(lái)講,應(yīng)該是足夠應(yīng)對(duì)一般研發(fā)問(wèn)題了,而難能可貴
    發(fā)表于 02-26 15:24

    EE-188:使用C語(yǔ)言在ADSP-219x DSP上實(shí)現(xiàn)中斷驅(qū)動(dòng)系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《EE-188:使用C語(yǔ)言在ADSP-219x DSP上實(shí)現(xiàn)中斷驅(qū)動(dòng)系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 01-15 16:06 ?0次下載
    EE-188:使用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>在ADSP-219x DSP上<b class='flag-5'>實(shí)現(xiàn)</b>中斷驅(qū)動(dòng)系統(tǒng)

    AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺(tái)使用后減少了50%以上跨語(yǔ)言調(diào)用接口代碼量;某圖像處理軟件所有C++代碼復(fù)用通過(guò)AKI來(lái)實(shí)現(xiàn)。使用AKI后這些項(xiàng)目不僅減少了項(xiàng)
    發(fā)表于 01-02 17:08

    基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

    直方圖統(tǒng)計(jì)的原理 直方圖統(tǒng)計(jì)從數(shù)學(xué)上來(lái)說(shuō),是對(duì)圖像中的像素點(diǎn)進(jìn)行統(tǒng)計(jì)。圖像直方圖統(tǒng)計(jì)常用于統(tǒng)計(jì)灰度圖像,表示圖像中各個(gè)灰度級(jí)出現(xiàn)的次數(shù)或者概率。統(tǒng)計(jì)直方圖的實(shí)現(xiàn)采用C/C++或者其他高級(jí)語(yǔ)言實(shí)
    的頭像 發(fā)表于 12-24 10:24 ?784次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)

    使用C語(yǔ)言實(shí)現(xiàn)函數(shù)模板

      用C語(yǔ)言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?949次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過(guò)使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?1233次閱讀

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?1079次閱讀

    何用 S7-200 實(shí)現(xiàn) Modbus 通信?

    電子發(fā)燒友網(wǎng)站提供《如何用 S7-200 實(shí)現(xiàn) Modbus 通信?.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:22 ?2次下載

    商湯科技元蘿卜國(guó)際象棋機(jī)器人9月上市

    商湯科技旗下的家用機(jī)器人品牌“元蘿卜SenseRobot”近期推出了一款創(chuàng)新力作——元蘿卜AI下棋機(jī)器人國(guó)際象棋專業(yè)版。這款機(jī)器人不僅在技術(shù)上實(shí)現(xiàn)了突破,能夠精準(zhǔn)地通過(guò)機(jī)械爪拾取立體棋子,更在功能上實(shí)現(xiàn)了多元化,集人機(jī)對(duì)弈、人人
    的頭像 發(fā)表于 08-26 14:52 ?723次閱讀