色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-19 10:30 ? 次閱讀

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

游戲介紹:

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

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

本項目編譯環境:VS2019/VS2013;

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

效果圖展示

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

源代碼示例:

#include#include#define INTERVAL 50  //前面的間隔#define CHESS_GRID_SIZE 70  //格子寬度#define ROW  10#define COL  9enum PIECES//枚舉棋子{  車,馬,象,士,將,砲,卒,  俥,馬,相,仕,帥,炮,兵,  SPACE,BEGIN,END};//紅黑方棋子、int redChess[] = { 車, 馬, 象, 士, 將, 砲, 卒};int blackChess[] = { 俥, 馬, 相, 仕, 帥, 炮, 兵 };const char*chessName[] = { "車", "馬", "象", "士", "將", "砲", "卒", "俥", "馬", "相", "仕", "帥", "炮", "兵" };struct Chess//棋子屬性{  int x;  int y;  int id;//哪個棋子  int type;//是哪一方的棋子 紅,黑?  bool river;//判斷小兵是否過了河};struct Chess  map[ROW][COL];//結構體數組,用來保存每一個點的信息POINT begin = { -1, -1 }, end = { -1, -1 };//保存前后兩次點擊的數組下標int state = BEGIN;//初始化游戲數據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];          }        }        //設置炮        if (i == 2 && (k == 1 || k == 7))        {          chessname = blackChess[砲];        }        //設置小兵        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];          }        }        //設置炮        if (i == 7 && (k == 1 || k == 7))        {          chessname = redChess[炮];        }        //設置小兵        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;    }  }}//游戲的繪制函數void GameDraw(){  //設置背景顏色 red black   setbkcolor(RGB(252, 215, 162));  cleardevice();
  //繪制棋盤  setlinecolor(BLACK);  setlinestyle(PS_SOLID, 2);  for (int i = 0; i < 10; i++)  {    //畫橫線    line(INTERVAL, i*CHESS_GRID_SIZE + INTERVAL, 8 * CHESS_GRID_SIZE + INTERVAL, i*CHESS_GRID_SIZE + INTERVAL);    //畫豎線    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);  //畫九宮格    //畫上面  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);     //畫下面  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);  //畫棋子  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)    {      //獲取鼠標點擊的數組的下標      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(){    //創建一個圖形窗口  initgraph(800,800,SHOWCONSOLE);  GameInit();  printf("歡迎來到頑石老師課堂,中國象棋");  BeginBatchDraw();  while (1)  {    GameDraw();    FlushBatchDraw();    MouseControl();    chessMove();  }  return 0;}

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

    關注

    180

    文章

    7614

    瀏覽量

    137450
  • 代碼
    +關注

    關注

    30

    文章

    4823

    瀏覽量

    68904

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

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

收藏 人收藏

    評論

    相關推薦

    AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺使用后減少了50%以上跨語言調用接口代碼量;某圖像處理軟件所有C++代碼復用通過AKI來實現。使用AKI后這些項目不僅減少了
    發表于 01-02 17:08

    基于FPGA實現圖像直方圖設計

    直方圖統計的原理 直方圖統計從數學上來說,是對圖像中的像素點進行統計。圖像直方圖統計常用于統計灰度圖像,表示圖像中各個灰度級出現的次數或者概率。統計直方圖的實現采用C/C++或者其他高級語言實
    的頭像 發表于 12-24 10:24 ?192次閱讀
    基于FPGA<b class='flag-5'>實現</b>圖像直方圖設計

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?450次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?409次閱讀

    何用 S7-200 實現 Modbus 通信?

    電子發燒友網站提供《如何用 S7-200 實現 Modbus 通信?.pdf》資料免費下載
    發表于 09-14 10:22 ?1次下載

    PLC編程語言C語言的區別

    在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區別。本文將從多個維度深入探討PLC編程
    的頭像 發表于 06-14 17:11 ?3139次閱讀

    何用C語言實現高效查找(二分法)

    今天給分享一下使用C語言實現二分算法,主要包含以下幾部分內容:二分查找算法介紹二分查找算法使用場景二分查找算法代碼實現二分查找算法實現過程用C
    的頭像 發表于 06-04 08:04 ?1243次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實現</b>高效查找(二分法)

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1049次閱讀

    嵌入式編程,如何用 C 語言實現狀態機設計?

    狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實需要一番考慮
    發表于 04-23 11:00

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    fpga語言是什么?fpga語言c語言的區別

    功能,從而實現對數字電路的高效定制。FPGA語言主要包括VHDL(VHSIC Hardware Description Language)和Verilog等,這些語言具有強大的描述能力,能夠精確地定義硬件的每一個細節,從而
    的頭像 發表于 03-15 14:50 ?998次閱讀

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?543次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎<b class='flag-5'>實現</b>與應用

    plc編程語言c語言的聯系 c語言和PLC有什么區別

    PLC編程語言C語言的聯系 PLC(可編程邏輯控制器)是一種針對自動化控制系統的特殊計算機。PLC編程語言是為了控制和管理自動化生產過程中的各種設備而設計的。與之相比,
    的頭像 發表于 02-05 14:21 ?4347次閱讀

    c語言,c++,java,python區別

    C語言C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言
    的頭像 發表于 02-05 14:11 ?2553次閱讀

    vb語言c++語言的區別

    VB語言C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設計和用途上有很多區別。下面將詳細比較VB
    的頭像 發表于 02-01 10:20 ?2475次閱讀
    主站蜘蛛池模板: 7756短视频| videossexo乌克兰| 中文字幕欧美日韩VA免费视频 | 男生J桶进女人P又色又爽又黄 | 九九在线中文字幕无码 | 欧美成人无码A区在线观看免费 | 在线 亚洲 日韩 欧洲视频 | 在线播放av欧美无码碰 | 亚洲中文 字幕 国产 综合 | 精品亚洲国产熟女福利自在线 | a免费视频 | 偷偷鲁青春草原视频分类 | 国产精品久久久久久免费播放 | 成人免费视频在线观看 | 人妻无码AV中文系统久久免费 | 国产亚洲精品线观看不卡 | 亚洲国产日韩欧美高清片a 亚洲国产日韩a精品乱码 | WWW国产精品人妻一二三区 | 好紧好湿太硬了我太爽了小说 | 亚洲AV蜜桃永久无码精品红樱桃 | 琪琪的色原网站 | 精品无码一区二区三区不卡 | 熟女人妻水多爽中文字幕 | 裸妇厨房风流在线观看 | 优优色影院 | 6 10young俄罗斯| 国产人在线成免费视频 | 97免费观看视频 | 在线国产视频观看 | 亚洲欧洲日产国产 最新 | 人人干人人插 | 午夜精品久久久久久99热蜜桃 | 鞋奴的视频VK | 精品亚洲欧美中文字幕在线看 | 少妇连续高潮抽搐痉挛昏厥 | 亚洲黄色成人 | 看看妇女的B免费看 | 青青国产在线观看视频 | 一个人免费观看HD完整版 | 大地影院日本韩国电影免费观看 | 高跟丝袜岳第一次 |