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

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

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

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

如何用C語言實現(xiàn)中國象棋項目

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

掃碼添加小助手

加入工程師交流群

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

游戲介紹:

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

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

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

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

效果圖展示

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

源代碼示例:

#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];//結(jié)構(gòu)體數(shù)組,用來保存每一個點的信息POINT begin = { -1, -1 }, end = { -1, -1 };//保存前后兩次點擊的數(shù)組下標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();
  //繪制棋盤  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)    {      //獲取鼠標點擊的數(shù)組的下標      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)建一個圖形窗口  initgraph(800,800,SHOWCONSOLE);  GameInit();  printf("歡迎來到頑石老師課堂,中國象棋");  BeginBatchDraw();  while (1)  {    GameDraw();    FlushBatchDraw();    MouseControl();    chessMove();  }  return 0;}

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

    關(guān)注

    183

    文章

    7644

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73990

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    講解C語言代碼的實現(xiàn)過程

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

    C語言實現(xiàn)萬年歷

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

    C語言實現(xiàn)PID算法介紹

    PID 是 Proportional(比例)、Integral(積分)、Differential(微分)的首字母縮寫;是一種結(jié)合比例、積分和微分三種環(huán)節(jié)于一體的閉環(huán)控制算法。PID 控制的實質(zhì)是對目標值和實際值誤差進行比例、積分、微分運算后的結(jié)果用來作用在輸出上。 比例 (P) 比例控制是最簡單的一種控制方式,成比例的反應控制系統(tǒng)中輸入與輸出的偏差信號,只要偏差一旦產(chǎn)生,就立即產(chǎn)生控制的作用來減小產(chǎn)生的誤差。比例控制器的輸出與輸入成正比關(guān)系,能夠迅速的反應偏差,偏差減小的速度取決于比例系數(shù) Kp,Kp 越大偏差減小的就越快,但是極易引起震蕩;Kp 減小發(fā)生震蕩的可能性減小,但是調(diào)節(jié)的速度變慢,單純的比例控制存在不能消除的靜態(tài)誤差,這里就需要積分來控制。 積分(I) 在比例控制環(huán)節(jié)產(chǎn)生了靜態(tài)誤差,在積分環(huán)節(jié)中,主要用于就是消除靜態(tài)誤差提高系統(tǒng)的無差度。積分作用的強弱,取決于積分時間常數(shù) Ti,Ti 越大積分作用越弱,反之則越強。積分控制作用的存在與偏差 e(t) 的存在時間有關(guān),只要系統(tǒng)存在著偏差,積分環(huán)節(jié)就會不斷起作用,對輸入偏差進行積分,使控制器的輸出及執(zhí)行器的開度不斷變化,產(chǎn)生控制作用以減小偏差。在積分時間足夠的情況下,可以完全消除靜差,這時積分控制作用將維持不變。Ti 越小,積分速度越快,積分作用越強。積分作用太強會使系統(tǒng)超調(diào)加大,甚至使系統(tǒng)出現(xiàn)振蕩。 微分(D) 微分環(huán)節(jié)的作用是反應系統(tǒng)偏差的一個變化趨勢,也可以說是變化率,可以在誤差來臨之前提前引入一個有效的修正信號,有利于提高輸出響應的快速性, 減小被控量的超調(diào)和增加系統(tǒng)的穩(wěn)定性,雖然積分環(huán)節(jié)可以消除靜態(tài)誤差但是降低了系統(tǒng)的響應速度,所以引入微分控制器就顯得很有必要,尤其是具有較大慣性的被控對象使用 PI 控制器很難得到很好的動態(tài)調(diào)節(jié)品質(zhì),系統(tǒng)會產(chǎn)生較大的超調(diào)和振蕩,這時可以引入微分作用。在偏差剛出現(xiàn)或變化的瞬間,不僅根據(jù)偏差量作出及時反應(即比例控制作用),還可以根據(jù)偏差量的變化趨勢(速度)提前給出較大的控制作用(即微分控制作用),將偏差消滅在萌芽狀態(tài),這樣可以大大減小系統(tǒng)的動態(tài)偏差和調(diào)節(jié)時問,使系統(tǒng)的動態(tài)調(diào)節(jié)品質(zhì)得以改善。微分環(huán)節(jié)有助于系統(tǒng)減小超調(diào),克服振蕩,加快系統(tǒng)的響應速度,減小調(diào)節(jié)時間,從而改善了系統(tǒng)的動態(tài)性能,但微分時間常數(shù)過大,會使系統(tǒng)出現(xiàn)不穩(wěn)定。微分控制作用一個很大的缺陷是容易引入高頻噪聲,所有在干擾信號比較嚴重的流量控制系統(tǒng)中不宜引入微分控制作用。
    發(fā)表于 01-16 07:24

    何用軟件實現(xiàn)系統(tǒng)的復位?

    看門狗的工作過程是怎樣的? 如何用軟件實現(xiàn)系統(tǒng)的復位?
    發(fā)表于 01-08 06:15

    C語言主要特點

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

    何用C 語言函數(shù)的返回值?

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

    單片機C語言編程的心得

    規(guī)范程序結(jié)構(gòu)化設(shè)計的需要,既可以實現(xiàn)大型程序的模塊化,又可以實現(xiàn)根各模塊的連接調(diào)試。 1、.H文件介紹: 在單片機C程序設(shè)計中,項目一般按功能模塊化進行結(jié)構(gòu)化設(shè)計。將一個
    發(fā)表于 12-08 07:44

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

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

    請問如何用C語言列舉當前所有網(wǎng)口?

    何用C語言列舉當前所有網(wǎng)口?
    發(fā)表于 11-25 07:23

    C語言特性

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

    C++ 與 Python:樹莓派上哪種語言更優(yōu)?

    Python是樹莓派上的首選編程語言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項目中同樣廣受歡迎且功能強大。那么,在樹莓派項目中選擇哪種語言
    的頭像 發(fā)表于 07-24 15:32 ?952次閱讀
    <b class='flag-5'>C</b>++ 與 Python:樹莓派上哪種<b class='flag-5'>語言</b>更優(yōu)?

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

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

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

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

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

    在學習編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語言都是一塊重要的基石。然而許多人在學習
    的頭像 發(fā)表于 03-14 17:37 ?922次閱讀
    為什么學了<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單片機
    發(fā)表于 03-14 11:03