国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用C語言實現國際象棋項目

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-21 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這篇文章主要為大家詳細介紹了C語言實現——《國際象棋項目》它和中國象棋可不一樣喲!文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!

游戲介紹:

國際象棋(Chess),又稱西洋棋,是一種二人對弈的棋類游戲。

棋盤為正方形,由64個黑白(深色與淺色)相間的格子組成;棋子分黑白(深色與淺色)兩方共32枚,每方各16枚。雖然漢語稱之為西洋棋或國際象棋,但是實際上它起源于亞洲,后由阿拉伯人傳入歐洲,成為國際通行棋種。

行棋規則

國際象棋是雙方對下的,一方用白棋,一方用黑棋。對局由執白者先行,每次走一步,雙方輪流行棋,直到對局結束。各種棋子的一般走法如下:

王(K):橫、直、斜都可以走,但每次限走一步。王是不可以送吃的,即任何被敵方控制的格子,己方王都不能走進去。否則,算“送王”犯規,三次就要判負。

(1)除易位時外,王可走到不被對方棋子攻擊的任何相鄰格子,而且只能走一步(著)。

(2)易位是由王和己方任何一個車一起進行的仍被視作王的一步(著)的走法。

后(Q):橫、直、斜都可以走,步數不受限制,但不能越子。

車(R):橫、豎均可以走,步數不受限制,不能斜走。除王車易位外不能越子。

象(B):只能斜走。格數不限,不能越子。開局時每方有兩象,一個占白格,一個占黑格。

馬(N):每步棋先橫走或直走一格,然后再往外斜走一格;或者先斜走一格,最后再往外橫走或豎走一格(即走“日”字)。可以越子,沒有中國象棋中的“蹩馬腿”限制。

兵(P):只能向前直走,每次只能走一格。但走第一步時,可以走一格或兩格。兵的吃子方法與行棋方向不一樣,它是直走斜吃,即如果兵的斜進一格內有對方棋子,就可以吃掉它而占據該格。

行棋規則大家一定要理解,因為這個關系到你實現這個國際象棋項目的規則邏輯部分!

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

源代碼示例:

#include  //要先安裝 easyX 到你的編譯器 #include 
#define SPACE  80
//記錄一個棋子落點struct MyPoint{  int x;  int y;};
//用來保存 單數次 鼠標左鍵點擊  和雙數次鼠標左鍵點擊struct MyPoint set[2];int n = 0;//記錄當前是第N次鼠標左鍵按下
//圖片變量IMAGE 黑棋盤img, 白棋盤img, 卒子A黑img, 卒子B黑img, 車A黑img, 車B黑img, 國王A黑img, 國王B黑img, 馬A黑img, 馬B黑img, 象A黑img, 象B黑img, 皇后A黑img, 皇后B黑img, 卒子A白img, 卒子B白img, 車A白img, 車B白img, 國王A白img, 國王B白img, 馬A白img, 馬B白img, 象A白img, 象B白img, 皇后A白img, 皇后B白img;//枚舉  為了代碼容易閱讀而寫enum state{  黑棋盤, 白棋盤,  卒子A黑, 卒子B黑, 車A黑, 車B黑, 國王A黑, 國王B黑, 馬A黑, 馬B黑, 象A黑, 象B黑, 皇后A黑, 皇后B黑,  卒子A白, 卒子B白, 車A白, 車B白, 國王A白, 國王B白, 馬A白, 馬B白, 象A白, 象B白, 皇后A白, 皇后B白};

//1 游戲初始化  做窗口  定義圖片變量  加載圖片   數據void initGame();
//2 繪制界面
//2.1 圖形界面void drawGame(int map[8][8]);//2.2 命令行界面void printGame(int map[8][8]);
//3 控制游戲//3.1 鼠標控制下棋void xiaqi(int map[8][8]);
//3.1 落子void luozi(int map[8][8]);
int main(){  //地圖  int map[8][8] = {    { 車B白, 馬B黑, 象B白, 國王B黑, 皇后B白, 象B黑, 馬B白, 車B黑 },    { 卒子B黑, 卒子B白, 卒子B黑, 卒子B白, 卒子B黑, 卒子B白, 卒子B黑, 卒子B白 },    { 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤 },    { 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤 },    { 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤 },    { 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤, 黑棋盤, 白棋盤 },    { 卒子A白, 卒子A黑, 卒子A白, 卒子A黑, 卒子A白, 卒子A黑, 卒子A白, 卒子A黑 },    { 車A黑, 馬A白, 象A黑, 皇后A白, 國王A黑, 象A白, 馬A黑, 車A白 }  };
  initGame();
  //創建線程  實時獲取鼠標情況  根據鼠標情況來修改界面
  while (1){    drawGame(map);    printGame(map);    xiaqi(map); //獲取鼠標的坐標  和 鼠標是否按下    getMouseMsg  阻塞    //Sleep(20);  }


  return 0;}
//1 游戲初始化  做窗口  定義圖片變量  加載圖片   數據void initGame(){  //      窗口寬    窗口高     自帶命令行窗口  initgraph(8 * SPACE, 8 * SPACE, SHOWCONSOLE);  //把素材放到和源程序文件一起(編譯器運行)  //把素材放到和可執行程序文件(*.exe)一起(直接雙擊運行)
  loadimage(&黑棋盤img, L"黑棋盤.bmp", SPACE, SPACE, true);  loadimage(&白棋盤img, L"白棋盤.bmp", SPACE, SPACE, true);  loadimage(&卒子A黑img, L"卒子A黑.bmp", SPACE, SPACE, true);  loadimage(&卒子B黑img, L"卒子B黑.bmp", SPACE, SPACE, true);  loadimage(&車A黑img, L"車A黑.bmp", SPACE, SPACE, true);  loadimage(&車B黑img, L"車B黑.bmp", SPACE, SPACE, true);  loadimage(&國王A黑img, L"國王A黑.bmp", SPACE, SPACE, true);  loadimage(&國王B黑img, L"國王B黑.bmp", SPACE, SPACE, true);  loadimage(&馬A黑img, L"馬A黑.bmp", SPACE, SPACE, true);  loadimage(&馬B黑img, L"馬B黑.bmp", SPACE, SPACE, true);  loadimage(&象A黑img, L"象A黑.bmp", SPACE, SPACE, true);  loadimage(&象B黑img, L"象B黑.bmp", SPACE, SPACE, true);  loadimage(&皇后A黑img, L"皇后A黑.bmp", SPACE, SPACE, true);  loadimage(&皇后B黑img, L"皇后B黑.bmp", SPACE, SPACE, true);  loadimage(&卒子A白img, L"卒子A白.bmp", SPACE, SPACE, true);  loadimage(&卒子B白img, L"卒子B白.bmp", SPACE, SPACE, true);  loadimage(&車A白img, L"車A白.bmp", SPACE, SPACE, true);  loadimage(&車B白img, L"車B白.bmp", SPACE, SPACE, true);  loadimage(&國王A白img, L"國王A白.bmp", SPACE, SPACE, true);  loadimage(&國王B白img, L"國王B白.bmp", SPACE, SPACE, true);  loadimage(&馬A白img, L"馬A白.bmp", SPACE, SPACE, true);  loadimage(&馬B白img, L"馬B白.bmp", SPACE, SPACE, true);  loadimage(&象A白img, L"象A白.bmp", SPACE, SPACE, true);  loadimage(&象B白img, L"象B白.bmp", SPACE, SPACE, true);  loadimage(&皇后A白img, L"皇后A白.bmp", SPACE, SPACE, true);  loadimage(&皇后B白img, L"皇后B白.bmp", SPACE, SPACE, true);}
//2 繪制界面
//2.1 圖形界面void drawGame(int map[8][8]){  for (int i = 0; i < 8; i++){    for (int j = 0; j < 8; j++){      switch (map[i][j]){      case 黑棋盤:putimage(j*SPACE, i*SPACE, &黑棋盤img);  break;      case 白棋盤:putimage(j*SPACE, i*SPACE, &白棋盤img);  break;      case 卒子A黑:putimage(j*SPACE, i*SPACE, &卒子A黑img);  break;      case 卒子B黑:putimage(j*SPACE, i*SPACE, &卒子B黑img);  break;      case 車A黑:  putimage(j*SPACE, i*SPACE, &車A黑img);  break;      case 車B黑:  putimage(j*SPACE, i*SPACE, &車B黑img);  break;      case 國王A黑:putimage(j*SPACE, i*SPACE, &國王A黑img);  break;      case 國王B黑:putimage(j*SPACE, i*SPACE, &國王B黑img);  break;      case 馬A黑:  putimage(j*SPACE, i*SPACE, &馬A黑img);  break;      case 馬B黑:  putimage(j*SPACE, i*SPACE, &馬B黑img);  break;      case 象A黑:  putimage(j*SPACE, i*SPACE, &象A黑img);  break;      case 象B黑:  putimage(j*SPACE, i*SPACE, &象B黑img);  break;      case 皇后A黑:putimage(j*SPACE, i*SPACE, &皇后A黑img);  break;      case 皇后B黑:putimage(j*SPACE, i*SPACE, &皇后B黑img);  break;      case 卒子A白:putimage(j*SPACE, i*SPACE, &卒子A白img);  break;      case 卒子B白:putimage(j*SPACE, i*SPACE, &卒子B白img);  break;      case 車A白:  putimage(j*SPACE, i*SPACE, &車A白img);  break;      case 車B白:  putimage(j*SPACE, i*SPACE, &車B白img);  break;      case 國王A白:putimage(j*SPACE, i*SPACE, &國王A白img);  break;      case 國王B白:putimage(j*SPACE, i*SPACE, &國王B白img);  break;      case 馬A白:  putimage(j*SPACE, i*SPACE, &馬A白img);  break;      case 馬B白:  putimage(j*SPACE, i*SPACE, &馬B白img);  break;      case 象A白:  putimage(j*SPACE, i*SPACE, &象A白img);  break;      case 象B白:  putimage(j*SPACE, i*SPACE, &象B白img);  break;      case 皇后A白:putimage(j*SPACE, i*SPACE, &皇后A白img);  break;      case 皇后B白:putimage(j*SPACE, i*SPACE, &皇后B白img);  break;      default:break;      }    }  }}//2.2 命令行界面void printGame(int map[8][8]){  //system("cls");//清屏  for (int i = 0; i < 8; i++){    for (int j = 0; j < 8; j++){      printf("%02d  ", map[i][j]);    }    printf("
");  }}
void xiaqi(int map[8][8]){  //點兩下   //第一下 選中棋子  //第二下  落子        //偶數次            //奇數次  int idx = n % 2;  MOUSEMSG msg;
  msg = GetMouseMsg();//獲取鼠標信息  if (msg.mkLButton){//鼠標左鍵按下    set[idx].x = msg.x /SPACE;    set[idx].y = msg.y / SPACE;    printf("坐標:%d %d  下標:%d %d
", msg.x, msg.y, set[idx].x, set[idx].y);    if (1 == idx){//落子      luozi(map);    }
    n++;  }
}
//3.1 落子void luozi(int map[8][8]){
    switch (map[set[0].y][set[0].x]){//判斷 set[0]  位置是什么棋子      case 卒子A黑:    //判斷 能不能移動到  set[1]位置    如果能  就移動    if (set[0].y - set[1].y == 1){//往上走一格      map[set[0].y][set[0].x] = 黑棋盤;//本來位置變成黑棋盤      map[set[1].y][set[1].x] = 卒子A白;//目的地位置變成卒子A白    }    break;  case 卒子A白:    //判斷 能不能移動到  set[1]位置    如果能  就移動    if (set[0].y - set[1].y == 1){//往上走一格      map[set[0].y][set[0].x] = 白棋盤;//本來位置變成黑棋盤      map[set[1].y][set[1].x] = 卒子A黑;//目的地位置變成卒子A白    }    break;  }  

}

未完成的棋子代碼,大家也可以自己先去想想試試,每一次的思考就是你進步的過程!

責任編輯:haq


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145579
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73960

原文標題:C語言項目實戰:《國際象棋》零基礎項目!200 行源代碼示例

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言安全編碼指南:MISRA C、CERT C、CWE 與 C Secure 標準對比與Perforce QAC應用詳解

    如何編寫真正安全的C語言代碼?指南涵蓋MISRA C、CERT、CWE等國際安全編碼標準對比,以及如何借助Perforce QAC自動檢測漏洞。推薦給嵌入式/汽車/工業軟件的開發者!
    的頭像 發表于 01-26 17:38 ?807次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>安全編碼指南:MISRA <b class='flag-5'>C</b>、CERT <b class='flag-5'>C</b>、CWE 與 <b class='flag-5'>C</b> Secure 標準對比與Perforce QAC應用詳解

    講解C語言代碼的實現過程

    重點講解C語言代碼的實現過程,算法的C語言實現過程具有一般性,通過PID算法的C
    發表于 01-21 07:58

    C語言實現萬年歷

    C語言實現萬年歷程序的代碼如下:#include int year(int y) { if ((y%4==0) (y%100!=0) || y%400==0) return 366
    發表于 01-16 08:02

    2026 CES 現象級焦點!元蘿卜全場景矩陣彰顯中國智造硬實力

    的4500多家企業,其中具身智能、家用機器人等賽道成為絕對焦點。家用機器人品牌元蘿卜(SenseRobot)再度亮相,攜國際象棋機器人專業版、二合一啟蒙機器人(國際象棋 + 國際跳棋)、國際象
    的頭像 發表于 01-13 14:22 ?191次閱讀

    何用軟件實現系統的復位?

    看門狗的工作過程是怎樣的? 如何用軟件實現系統的復位?
    發表于 01-08 06:15

    C語言主要特點

    指針類型數據,使用十分靈活和多樣化,能用來實現各種復雜的數據結構(如鏈表、樹、棧等)的運算。 4.具有結構化的控制語句。用函數作為程序的模塊單位,便于實現程序的模塊化。C語言是完全模塊
    發表于 01-05 07:41

    何用C 語言函數的返回值?

    基本上,沒有人會將大段的C語言代碼全部塞入 main() 函數。更好的做法是按照復用率高、耦合性低的原則,盡可能的將代碼拆分不同的功能模塊,并封裝成函數。 C語言代碼的組合千變萬化,因
    發表于 12-25 07:17

    為什么單片機還在用C語言編程?

    的缺陷 高級語言存在的目的是可以實現更為優化的算法,更多的是為了方便的執行方案,但是,高級語言對程序存儲空間的占用要比匯編和C語言多很多。
    發表于 11-28 07:37

    請問如何用C語言列舉當前所有網口?

    何用C語言列舉當前所有網口?
    發表于 11-25 07:23

    C語言特性

    數據,實現對設備的精準控制,同時降低功耗,延長設備的使用壽命。 2、可移植性:跨平臺的通行證 C 語言具有良好的可移植性,這意味著用 C 語言
    發表于 11-24 07:01

    單片機C語言實例(350+例)

    350+單片機C語言實例! 純分享帖,需要者可點擊附件免費獲取完整資料~~~【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內容!
    發表于 05-22 21:47

    中軟國際在大型銀行AI項目領域實現重大突破

    近日,中軟國際成功中標某全國性股份制銀行2025年大模型算力擴容項目,標志著中軟國際在大型銀行AI項目領域實現重大突破,進一步鞏固了其在金融
    的頭像 發表于 05-06 11:46 ?1052次閱讀
    中軟<b class='flag-5'>國際</b>在大型銀行AI<b class='flag-5'>項目</b>領域<b class='flag-5'>實現</b>重大突破

    深入理解C語言C語言循環控制

    C語言編程中,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循環控制語句,如break、continue和
    的頭像 發表于 04-29 18:49 ?2043次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    為什么學了C語言,卻寫不出像樣的項目

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

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機C語言快速上手 4. 51單片機
    發表于 03-14 11:03