在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

C語言零基礎項目:自制軍棋游戲!詳細思路+源碼分享

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 2022-12-29 17:14 ? 次閱讀

每天一個C語言小項目,提升你的編程能力!

這是一款由 shareli 自創規則的軍旗游戲,具體的游戲規則如下:

棋盤大小:6×6。

棋子總數:36。

敵對雙方:紅,藍。

棋子類別:紅棋(紅方操作,14 個),藍棋(藍方操作,14 個),紫棋(功能棋,8 個)。

紅棋(藍棋)類型:司令,軍長,師長,旅長,團長,營長,連長,班長,軍旗,工兵×2,炸彈×2。

紫棋類型:地雷×4,變身棋×4。

【規則說明】

1. 司令最大,工兵最小,大的吃小的,一樣就同歸于盡,炸彈能炸紫棋和敵方除軍旗外所有的棋(炸彈也會消失)。

2. 工兵可挖地雷,挖完后可扛對方棋變身(挖的雷越多,變成的人物越厲害)。

3. 人物棋可吃變,吃后能變成工兵~軍長中的一種,有一定幾率變成隱藏 BOSS。

4. 人物棋可自殺(算一次操作)。

5. 執棋方進行完一次有效操作后,就換對方執棋(邊框顏色表當前執棋方)。

6. 一方棋子(軍旗除外)全被消滅,就算輸; 同時全部沒有,則和棋。

【執棋方能進行的操作】

1. 打開棋子(算一次操作)。

2. 攻擊。

3. 移動。

4. 工兵(已挖雷)扛旗。

5. 吃變身卡。

6. 自殺。

【實施游戲操作說明(鼠標操作)】

1. 選擇要打開棋子所在的區域,單擊。

2~5. 單擊選中主動方(棋子邊框會變綠),再單擊選中被動方。

6. 選中己方棋子,單機鼠標的中鍵。

注:要進行其他操作,必先撤銷當前選定(單擊右鍵撤銷)

【人物棋等級一覽(等高殺等小)】

工1 班2 連3 營4 團5 旅6 師7 軍8 飛8 司9 升9 神10 仙10。

注:“飛、升、神、仙”都為工兵挖雷后扛旗所變,“飛、升、神”能直線飛,“仙”能滿天飛。

本項目編譯環境:Visual Studio 2019/2022,EasyX插件

完整源代碼如下:

#include 
#include 
#include 


#define  CHESIZE  40    // 棋盤尺寸,不能隨意調整
#define  RESETX  170
#define  RESETY  350    // 重置原點


typedef enum      // 要用到的棋子ID
{
  si, jun, shi, lv, tuan, 
  ying, lian, pai, ban, gong, 
  fei, chao, zha, qi, lei, bian,
  xian, sheng,  shen
}CHESSID;


typedef enum      // 攻擊類型
{
  comatt, preatt, noatt
}ATTSTYLE;


typedef enum      // 當前游戲方和棋子所屬方
{
  blue, red, white
}TEAM;


typedef enum      // 選中與未選中
{
  alchoose, unchoose
}CHOOSESTATE;


typedef enum      // 區域狀態
{
  unknow, empty, exist
}STATE;


typedef struct      // 坐標
{
  int x;
  int y;
}COOR;


typedef struct      // 棋子
{
  CHESSID    id;    // 棋子的ID
  int        power;  // 棋子的等級
  TEAM       team;  // 所屬方
  char       *image;  // 該棋子的圖片,考慮到運行問題,本程序用字代替
  int        scoopc;  // 工兵是挖到的地雷數
}CHESS;


typedef struct      // 區域
{
  COOR crdld;      // 區域的左下坐標
  CHESS chess;    // 區域的棋子
  STATE  state;    // 區域狀態
}AREA;


typedef struct      // 用戶的選擇信息
{
  int i;      
  int j;
  CHOOSESTATE state;  // 選擇狀態
}CHOOSE;


IMAGE image;
AREA area[6][6];    // 定義棋盤大小
CHESS datachess[19];  // 幾種基本棋子類型
CHOOSE choose;      // 用戶選擇信息
MOUSEMSG mmsg;      // 鼠標信息
TEAM  user;        // 執棋方
int lockchessboard = 0;  // 是否鎖定棋盤
int i;          // 當前鼠標所在區域的坐標
int j;                         
char *str[]={"工","班","排","連","營","團","旅","師","軍","司","棋","炸","變","雷","飛","超","升","神","仙"}; 


void init();      
void initchessbute();  // 給初始化棋子基本參數
void initvalue();
void drawboard();    // 畫棋盤
void randomarr(int *);  // 實現棋的隨機排列
void judge();
void getpreij();    // 獲得當前鼠標所在區域坐標
int  checkij();      // 檢查當鼠標所在區域
void open();      // 打開所在區域
int  whemove();      // 判斷是否能移動
void move();      // 移動
int  judgeunknow();    // 檢測當前未翻開棋子數
ATTSTYLE  wheattack();  // 判斷是否能攻擊
void kill();      // 殺死當前選擇的棋
void killself();    // 自殺
void perishtogether();  // 同歸于盡
void getteam();      // 用作改變棋子類型時,對棋子所屬方賦值
void userchange();    // 交換執棋方
void judgebunko();    // 判斷輸贏
void choosearea();    // 選定區域
void cancelchoose();  // 取消選定
void change();      // 變身
void bluewin();      // 藍方勝利
void redwin();      // 紅方勝利
void gamehelp();    // 規則說明
void quit();      // 退出游戲
void peace();      // 和棋
void surrender();    // 投降
void resetchessboard();  // 重置


// 下面幾個函數為判斷棋子的攻擊類型
ATTSTYLE judgegong();  // 判斷工兵
ATTSTYLE judgecom();  // 判普通人物
ATTSTYLE judgezha();  // 判斷炸彈


void main()        // 主函數
{
  init();


  while (true)
  {
    mmsg = GetMouseMsg();
    getpreij();


    if (mmsg.uMsg == WM_LBUTTONDOWN)   //單擊左鍵
    {
      judge();
    }
    else if (mmsg.uMsg == WM_RBUTTONDOWN
        && choose.state==alchoose) //單擊右鍵
    {
      cancelchoose();
    }
    else if (mmsg.uMsg == WM_MBUTTONDOWN
        && choose.state == alchoose
        && area[choose.i][choose.j].chess.id != zha) //單擊中鍵
    {
      killself();
      cancelchoose();
      userchange();
      judgebunko(); 
    }
  }
}




void init()
{
  initgraph(640, 480);


  setorigin(RESETX, RESETY);    // 重置原點
  setaspectratio(1, -1);      // 把 y 軸上方設為正半軸


  drawboard();
  initvalue();


}


void drawboard()          // 畫棋盤
{
  int i1;


  setlinecolor(WHITE);
  for (i1=0; i1<7; i1++)
  {
    line(i1*CHESIZE, 0, i1*CHESIZE, CHESIZE*6);
  }


  for (i1=0; i1<7; i1++)
  {
    line(0, i1*CHESIZE, CHESIZE*6, i1*CHESIZE);
  }




  setlinecolor(WHITE);
  setfillcolor(RED);
  rectangle(-10, -10, CHESIZE*6+10, CHESIZE*6+10);
  floodfill(-1, -1, WHITE);


  rectangle(7*CHESIZE, CHESIZE, 9*CHESIZE, 6*CHESIZE);
  line(7*CHESIZE, 5*CHESIZE, 9*CHESIZE, 5*CHESIZE);
  line(7*CHESIZE, 4*CHESIZE, 9*CHESIZE, 4*CHESIZE);
  line(7*CHESIZE, 3*CHESIZE, 9*CHESIZE, 3*CHESIZE);
  line(7*CHESIZE, 2*CHESIZE, 9*CHESIZE, 2*CHESIZE);
  setaspectratio(1, 1);
  settextstyle(35, 18, "黑體");
  settextcolor(RED);
  outtextxy(7*CHESIZE+2, -6*CHESIZE+2, "幫助");
  settextcolor(BROWN);
  outtextxy(7*CHESIZE+2, -5*CHESIZE+2, "投降");
  settextcolor(GREEN);
  outtextxy(7*CHESIZE+2, -4*CHESIZE+2, "和棋");
  settextcolor(YELLOW);
  outtextxy(7*CHESIZE+2, -3*CHESIZE+2, "重置");
  settextcolor(CYAN);
  outtextxy(7*CHESIZE+2, -2*CHESIZE+2, "退出");


  settextcolor(LIGHTMAGENTA);
  settextstyle(50, 20, "黑體");
  outtextxy(CHESIZE, -CHESIZE*8, "兩國軍旗");


  setaspectratio(1, -1);
}


void initchessbute()        // 設置棋子基本參數
{
  datachess[0].id = gong;
  datachess[0].power = 1;
  datachess[0].image = str[0];
  datachess[0].scoopc = 0;


  datachess[1].id = ban;
  datachess[1].power = 2;
  datachess[1].image = str[1];
  datachess[1].scoopc = 0;


  datachess[2].id = pai;
  datachess[2].power = 3;
  datachess[2].image = str[2];
  datachess[2].scoopc = 0;


  datachess[3].id = lian;
  datachess[3].power = 4;
  datachess[3].image = str[3];
  datachess[3].scoopc = 0;


  datachess[4].id = ying;
  datachess[4].power = 5;
  datachess[4].image = str[4];
  datachess[4].scoopc = 0;


  datachess[5].id = tuan;
  datachess[5].power = 6;
  datachess[5].image = str[5];
  datachess[5].scoopc = 0;


  datachess[6].id = lv;
  datachess[6].power = 7;
  datachess[6].image = str[6];
  datachess[6].scoopc = 0;


  datachess[7].id = shi;
  datachess[7].power = 8;
  datachess[7].image = str[7];
  datachess[7].scoopc = 0;


  datachess[8].id = jun;
  datachess[8].power = 9;
  datachess[8].image = str[8];
  datachess[8].scoopc = 0;


  datachess[9].id = si;
  datachess[9].power = 10;
  datachess[9].image = str[9];
  datachess[9].scoopc = 0;


  datachess[10].id =  qi;
  datachess[10].power = 100;
  datachess[10].image = str[10];
  datachess[10].scoopc = 0;


  datachess[11].id = zha;
  datachess[11].power = 99;
  datachess[11].image = str[11];
  datachess[11].scoopc = 0;


  datachess[12].id = bian;
  datachess[12].power = 0;
  datachess[12].image = str[12];
  datachess[12].scoopc = 0;


  datachess[13].id = lei;
  datachess[13].power = 98;
  datachess[13].image = str[13];
  datachess[13].scoopc = 0;


  datachess[14].id = fei;
  datachess[14].power = 9;
  datachess[14].image = str[14];
  datachess[14].scoopc = 0;


  datachess[15].id = chao;
  datachess[15].power = 11;
  datachess[15].image = str[15];
  datachess[15].scoopc = 0;


  datachess[16].id = sheng;
  datachess[16].power = 10;
  datachess[16].image = str[16];
  datachess[16].scoopc = 0;


  datachess[17].id = shen;
  datachess[17].power = 11;
  datachess[17].image = str[17];
  datachess[17].scoopc = 0;


  datachess[18].id = xian;
  datachess[18].power = 11;
  datachess[18].image = str[18];
  datachess[18].scoopc = 0;  
}


void initvalue()          // 初始化值
{
  CHESS chess[36];
  int random[36];
  int count;
  int i1, j1;
  
  initchessbute();


  randomarr(random);


  for (i1=0; i1<=11; i1++)
  {
    chess[i1] = datachess[i1];
    chess[i1].team = red;
  }
  chess[i1] = datachess[11];
  chess[i1].team = red;
  chess[i1+1] = datachess[0];
  chess[i1+1].team = red;


  for (i1=0; i1<=11; i1++)
  {
    chess[i1+14] = datachess[i1];
    chess[i1+14].team = blue;
  }
  chess[i1+14] = datachess[11];
  chess[i1+14].team = blue;
  chess[i1+15] = datachess[0];
  chess[i1+15].team = blue;  


  for (i1=0; i1<4; i1++)
  {
    chess[i1+28] = datachess[12];
    chess[i1+28].team = white;
    chess[i1+32] = datachess[13];
    chess[i1+32].team = white;
  }


  setfillcolor(YELLOW);
  for (count=0, i1=0; i1<6; i1++)
  {
    for (j1=0; j1<6; j1++, count++)
    {
      area[i1][j1].chess = chess[random[count]];
      area[i1][j1].crdld.x = i1 * CHESIZE + 1;
      area[i1][j1].crdld.y = j1 * CHESIZE + 1;
      area[i1][j1].state = unknow;
      floodfill(area[i1][j1].crdld.x, area[i1][j1].crdld.y, WHITE);
    }
  }
  user = red;
  choose.state = unchoose;


}


void randomarr(int random[])    // 得到0~36數字的隨機排列
{
  int i1, j1;
  int flag = 0;


  srand(time(NULL));
  random[0] = rand() % 36 ;


  for (i1=1; i1<36; i1++)
  {
    while (1)
    {
      random[i1] = rand() % 36 ;
      for (j1=0; j1=0 && i<=5 && j>=0 && j<=5 && (mmsg.x-RESETX)>0 && -(mmsg.y-RESETY)>0))
      {
        return 1;
      }
      else
      {
        return 0;
      }
    }
    else
    {
      return 0;
    }
  }
}


// 打開操作
void open()
{
  setfillcolor(BLACK);
  floodfill(area[i][j].crdld.x, area[i][j].crdld.y, WHITE);


  setaspectratio(1, 1);
  if (area[i][j].chess.team == blue)
  {
    settextcolor(BLUE);
  }
  else if (area[i][j].chess.team == red)
  {
    settextcolor(RED);
  }
  else
  {
    settextcolor(MAGENTA);
  }
  settextstyle(35, 18, "黑體");
  outtextxy(area[i][j].crdld.x, -area[i][j].crdld.y-CHESIZE+2, area[i][j].chess.image);
  area[i][j].state = exist;
  setaspectratio(1, -1);
}


// 判斷是否能移動
int whemove()
{
  if (area[choose.i][choose.j].chess.id==fei || area[choose.i][choose.j].chess.id==sheng
    || area[choose.i][choose.j].chess.id==shen)
  {
    if (choose.i==i && abs(choose.j-j)<=5 || choose.j==j && abs(choose.i-i)<=5)
    {
      return 1;
    }
    else
    {
      return 0;
    }
  }
  else if (area[choose.i][choose.j].chess.id == xian)
  {
    return 1;
  }
  else
  {
    if (choose.i==i && abs(choose.j-j)==1 || choose.j==j && abs(choose.i-i)==1)
    {
      return 1;
    }
    else
    {
      return 0;
    }
  }
}


// 移動
void move()
{
  setfillcolor(BLACK);
  floodfill(area[choose.i][choose.j].crdld.x, area[choose.i][choose.j].crdld.y, GREEN);
  
  setaspectratio(1, 1);
  if (area[choose.i][choose.j].chess.id==gong && area[choose.i][choose.j].chess.scoopc>0)
  {
    if (area[choose.i][choose.j].chess.team == blue)
    {
      settextcolor(LIGHTBLUE);
    }
    else
    {
      settextcolor(LIGHTRED);
    }
  }
  else
  {
    if (user == blue)
    {
      settextcolor(BLUE);
    }
    else 
    {
      settextcolor(RED);
    }
  }
  settextstyle(35, 18, "黑體");
  outtextxy(area[i][j].crdld.x, -area[i][j].crdld.y-CHESIZE+2, area[choose.i][choose.j].chess.image);


  area[choose.i][choose.j].state = empty;
  area[i][j].state = exist;
  area[i][j].chess = area[choose.i][choose.j].chess;
  setaspectratio(1, -1);
}


// 判斷是否能攻擊,并返回攻擊類型
ATTSTYLE  wheattack()                              
{
  if (whemove())
  {
    if (area[choose.i][choose.j].chess.id == gong)
    {
      return judgegong();
    }
    else if (area[choose.i][choose.j].chess.id == zha)
    {
      return judgezha();
    }
    else
    {
      return judgecom();
    }
  }
  else
  {
    return noatt;
  }
      
}


// 判斷工兵
ATTSTYLE judgegong()                    
{
  if (area[i][j].chess.team != white)
  {
    if (area[choose.i][choose.j].chess.team != area[i][j].chess.team)
    {
      if (area[i][j].chess.id==gong || area[i][j].chess.id==zha)
      {
        return preatt;
      }
      else if (area[i][j].chess.id == qi)
      {
        if (area[choose.i][choose.j].chess.scoopc == 0)
        {
          return noatt;
        }
        else if (area[choose.i][choose.j].chess.scoopc == 1)
        {
          area[choose.i][choose.j].chess = datachess[14];
          getteam();
          return comatt;
        }
        else if (area[choose.i][choose.j].chess.scoopc == 2)
        {
          area[choose.i][choose.j].chess = datachess[16];
          getteam();
          return comatt;
        }
        else if (area[choose.i][choose.j].chess.scoopc == 3)
        {
          area[choose.i][choose.j].chess = datachess[17];
          getteam();
          return comatt;
        }
        else
        {
          area[choose.i][choose.j].chess = datachess[18];
          getteam();
          return comatt;
        }
      }
      else
      {
        return noatt;
      }
    }
    else
    {
      return noatt;
    }
  }
  else
  {
    if (area[i][j].chess.id == lei)
    {
      area[choose.i][choose.j].chess.scoopc++;
      return comatt;
    }
    else
    {
      change();
      return comatt;
    }
  }
}


// 判斷炸彈
ATTSTYLE judgezha()                          
{
  if (area[choose.i][choose.j].chess.team != area[i][j].chess.team)
  {
    if (area[i][j].chess.id != qi)
    {
      return preatt;
    }
    else
    {
      return noatt;
    }
  }
  else
  {
    return noatt;
  }
}


// 判斷普通人物  
ATTSTYLE judgecom()                    
{
  if (area[i][j].chess.team != white)
  {
    if (area[choose.i][choose.j].chess.team != area[i][j].chess.team)
    {
      if (area[choose.i][choose.j].chess.power==area[i][j].chess.power || area[i][j].chess.id==zha)
      {
        return preatt;
      }
      else if (area[choose.i][choose.j].chess.power > area[i][j].chess.power)
      {
        return comatt;
      }
      else 
      {
        return noatt;
      }
    }
    else
    {
      return noatt;
    }
  }
  else
  {
    if (area[i][j].chess.id == lei)
    {
      return noatt;
    }
    else
    {
      change();
      return comatt;
    }
  }
}


// 變身
void change()                              
{
  int x;
  x = rand() % 50;
  if (x == 6)
  {
    area[choose.i][choose.j].chess = datachess[15];
    getteam();
  }
  else
  {
    x = rand() % 4;
    if (x == 3)
    {
      x = rand() % 2;
      if (x == 0)
      {
        area[choose.i][choose.j].chess = datachess[7];
      }
      else
      {
        area[choose.i][choose.j].chess = datachess[8];
      }
      
      getteam();
    }
    else
    {
      x = rand() % 6;
      area[choose.i][choose.j].chess = datachess[x];


      getteam();
    }
  }
}


// 對棋子所屬方賦值
void getteam()                       
{
  if (user == blue)
  {
    area[choose.i][choose.j].chess.team = blue;
  }
  else
  {
    area[choose.i][choose.j].chess.team = red;
  }
}


// 殺死對方
void kill()                        
{
  move();
}


// 自殺
void killself()                     
{
  setfillcolor(BLACK);
  floodfill(area[choose.i][choose.j].crdld.x, area[choose.i][choose.j].crdld.y, GREEN);
  area[choose.i][choose.j].state = empty;
}


// 同歸于盡
void perishtogether()              
{
  setfillcolor(BLACK);
  cancelchoose();
  floodfill(area[choose.i][choose.j].crdld.x, area[choose.i][choose.j].crdld.y, WHITE);
  floodfill(area[i][j].crdld.x, area[i][j].crdld.y, WHITE);


  area[choose.i][choose.j].state = empty;
  area[i][j].state = empty;
}


// 切換執棋方
void userchange()                    
{
  if (user == blue)
  {
    user = red;
    setfillcolor(RED);
    floodfill(-1, -1, WHITE);
  }
  else
  {
    user = blue;
    setfillcolor(BLUE);
    floodfill(-1, -1, WHITE);
  }
}


// 判斷輸贏
void judgebunko()                          
{
  int i1, j1;
  int num1 = 0, num2 = 0;


  for (i1=0; i1<6; i1++)
  {
    for (j1=0; j1<6; j1++)
    {
      if (area[i1][j1].state != empty)
      {
        if (area[i1][j1].chess.team==red && area[i1][j1].chess.id!=qi)
        {
          num1++;
        }
        else if(area[i1][j1].chess.team==blue && area[i1][j1].chess.id!=qi)
        {
          num2++;
        }
      }
    }
  }
  
  if (num1==0 && num2!=0)
  {
    bluewin();
  }


  if (num2==0 && num1!=0)
  {
    redwin();
  }
  
  if (num1==0 && num2==0)
  {
    peace();
  }
}


// 藍方勝
void bluewin()                   
{
  setaspectratio(1, 1);
  settextcolor(BLUE);
  settextstyle(50, 20, "黑體");
  outtextxy(CHESIZE, -CHESIZE*8, "藍方勝利");
  setaspectratio(1, -1);
  setfillcolor(BLUE);
  floodfill(-1, -1, WHITE);


  lockchessboard = 1;              //鎖定棋盤
}


// 紅方勝
void redwin()                    
{
  setaspectratio(1, 1);
  settextcolor(RED);
  settextstyle(50, 20, "黑體");
  outtextxy(CHESIZE, -CHESIZE*8, "紅方勝利");
  setaspectratio(1, -1);
  setfillcolor(RED);
  floodfill(-1, -1, WHITE);


  lockchessboard = 1;
}


// 和棋
void peace()                      
{ 
  setaspectratio(1, 1); 
  settextcolor(GREEN);
  settextstyle(50, 20, "黑體");
  outtextxy(CHESIZE, -CHESIZE*8, "握手言和");
  setaspectratio(1, -1);
  setfillcolor(GREEN);
  floodfill(-1, -1, WHITE);


  lockchessboard = 1;
}


// 投降
void surrender()                   
{
  if (user == blue)
  {
    redwin();
  }
  else
  {
    bluewin();
  }
}


// 重置
void resetchessboard()              
{
  cleardevice();
  init();
}


// 游戲說明
void gamehelp()              
{
  getimage(&image, -10, -10, 500, 350);
  cleardevice();


  setorigin(50, 0);
  setaspectratio(1, 1);


  settextcolor(RED);
  settextstyle(14, 0, "黑體");
  outtextxy(-50, 0, "注:單擊鼠標左鍵回到游戲界面");


  settextcolor(WHITE);
  settextstyle(24, 0, "黑體");
  outtextxy(230, 5, "游戲說明");
  settextstyle(12, 0, "宋體");
  outtextxy(0, 35, "棋盤大小:6*6;              棋子總數:36;            敵對雙方:紅,藍");
  outtextxy(0, 60, "棋子類別:紅棋(紅方操作,14個) 藍棋(藍方操作,14個) 紫棋(功能棋,8個)");
  outtextxy(0, 85, "紅棋(藍棋)類型:司令,軍長,師長,旅長,團長,營長,連長,班長,軍旗,工兵*2,炸彈*2.");
  outtextxy(0, 100, "紫棋類型:地雷*4,變身棋*4.  注:'*'后面表示該棋的數量,沒注則只有一個");
  outtextxy(0, 125, "規則說明:1.司令最大,工兵最小,大的吃小的,一樣就同歸于盡,");
  outtextxy(textwidth("規則說明:1."), 140, "炸彈能炸紫棋和敵方除軍旗外所有的棋(炸彈也會消失)." );
  outtextxy(textwidth("規則說明:"), 155, "2.工兵可挖地雷,挖完后可扛對方棋變身(挖的雷越多,變成的人物越厲害).");
  outtextxy(textwidth("規則說明:"), 170, "3.人物棋可吃變,吃后能變成工兵~軍長中的一種,有一定幾率變成隱藏BOSS.");
  outtextxy(textwidth("規則說明:"), 185, "4.人物棋可自殺(算一次操作).");
  outtextxy(textwidth("規則說明:"), 200, "5.執棋方進行完一次有效操作后,就換對方執棋(邊框顏色表當前執棋方).");
  outtextxy(textwidth("規則說明:"), 215, "6.一方棋子(軍旗除外)全被消滅,就算輸; 同時全部沒有,則和棋.");
  outtextxy(0, 240, "執棋方能進行的操作:操作1:打開棋子(算一次操作).");
  outtextxy(textwidth("執棋方能進行的操作:"), 255, "操作2:攻擊.");
  outtextxy(textwidth("執棋方能進行的操作:"), 270, "操作3:移動.");
  outtextxy(textwidth("執棋方能進行的操作:"), 285, "操作4:工兵(已挖雷)扛旗.");
  outtextxy(textwidth("執棋方能進行的操作:"), 300, "操作5:吃變身卡.");
  outtextxy(textwidth("執棋方能進行的操作:"), 315, "操作6:自殺.");
  outtextxy(0, 340, "實施游戲操作說明(鼠標操作):實施操作1:選擇要打開棋子所在的區域,單擊.");
  outtextxy(textwidth("實施游戲操作說明(鼠標操作):"), 355, "實施操作2~5:單擊選中主動方(棋子邊框會變綠)");
  outtextxy(textwidth("實施游戲操作說明(鼠標操作):實施操作2~5:"), 370, "再單擊選中被動方.");
  outtextxy(textwidth("實施游戲操作說明(鼠標操作):"), 385, "實施操作6:選中己方棋子,單機鼠標的中鍵.");
  settextcolor(RED);
  outtextxy(textwidth("實施游戲操作說明(鼠標操作):"), 400,"注:要進行其他操作,必先撤銷當前選定(單擊右鍵撤銷)");
  settextcolor(WHITE);
  setlinecolor(WHITE);
  line(-30, 420, 570, 420);
  outtextxy(0, 425, "人物棋等級一覽(等高殺等小):工1 班2 連3 營4 團5 旅6 師7");
  outtextxy(textwidth("人物棋等級一覽(等高殺等小):"), 440, "軍8 飛8 司9 升9 神10 仙10");
  outtextxy(0, 455, "注:'飛' '升' '神' '仙' 都為工兵挖雷后扛旗所變,'飛''升''神'能直線飛,'仙'能滿天飛");


  while (true)
  {
    mmsg = GetMouseMsg();


    if (mmsg.uMsg == WM_LBUTTONDOWN)
    {
      break;
    }
  }


  cleardevice();
  setorigin(RESETX, RESETY);
  setaspectratio(1, -1);
  putimage(-10, -10, &image);
}


// 退出游戲
void quit()     
{
  closegraph();
}

大家趕緊去動手試試吧!

審核編輯:湯梓紅

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

    關注

    2

    文章

    742

    瀏覽量

    26317
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136841
  • 編程
    +關注

    關注

    88

    文章

    3616

    瀏覽量

    93738
  • 源碼
    +關注

    關注

    8

    文章

    641

    瀏覽量

    29216

原文標題:C語言零基礎項目:自制軍棋游戲!詳細思路+源碼分享

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

收藏 人收藏

    評論

    相關推薦

    C語言零基項目:涂格子(點燈)游戲詳細思路+源碼分享

    點燈游戲是一個十分有趣的智力游戲:有一行N行N列的燈,開始時全部是滅的,當你點擊其中一盞燈時他的上下左右(若存在的話)狀態全部改變,現在要求你在限定的時間內以最少地步數,將全部的燈點亮。
    發表于 12-16 09:47 ?880次閱讀

    C語言零基項目:貪吃蛇!詳細思路+源碼分享

    每天一個C語言項目,提升你的編程能力!
    發表于 12-19 11:04 ?722次閱讀

    零基礎怎樣學習C語言呢?

    零基礎學c語言如何開始
    發表于 05-15 10:23

    C語言游戲源碼分享

    C語言游戲源碼24點火柴人俄羅斯等等等35個游戲源碼網盤分享鏈接:https://pan.ba
    發表于 04-12 17:11

    C語言零基礎入門教學資料匯總下載

    C語言零基礎入門教學資料匯總下載
    發表于 05-29 10:41 ?132次下載

    C語言零基項目:打字母游戲詳細思路+源碼分享

    今天就用C語言寫了這么個打字母的小程序,就是以前學習機上那種字母往下掉,然后按相應鍵字母消失的游戲
    發表于 12-15 15:02 ?655次閱讀

    C語言零基項目:迷宮游戲詳細思路+源碼分享

    每天一個C語言項目,提升你的編程能力!
    的頭像 發表于 12-21 10:08 ?972次閱讀

    C語言零基項目:生命游戲詳細思路+源碼分享

    生命游戲不需要任何玩家,它是一個二維矩形世界,這個世界中的每個方格居住著一個活細胞或為空。
    的頭像 發表于 12-22 11:17 ?1030次閱讀

    C語言零基項目:推箱子游戲詳細思路+源碼分享

    推箱子是一個來自日本的古老游戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。
    的頭像 發表于 12-27 10:38 ?851次閱讀

    C語言零基項目:黑白棋游戲詳細思路+源碼分享

    《黑白棋》也叫翻轉棋或者奧賽羅,其游戲過程是相互翻轉對方的棋子,最后以棋盤上誰的棋子多來判斷勝負。雖然規則簡單,但是變化復雜,是典型的易學難精,奧妙無窮,不信您就試試看吧!
    的頭像 發表于 12-29 11:12 ?1005次閱讀

    C語言零基項目:對對碰(消除類)游戲詳細思路+源碼分享

    游戲中消除的對象為各種各樣的頭像,包括樹、小車、草莓和酒瓶等一些頭像。玩家通關移動這些頭像位置湊夠一定數量的相同圖標即可消除。
    的頭像 發表于 01-03 11:13 ?787次閱讀

    C語言零基項目:吃豆人小游戲詳細思路+源碼分享

    《吃豆游戲》是一款休閑小游戲,和貪吃蛇,球球大作戰吃食物都是有差不多的游戲邏輯。
    的頭像 發表于 01-03 11:38 ?1534次閱讀

    C語言項目:礦井逃生游戲(密室)!詳細思路+源碼分享

    密室逃脫相信大部分都玩過了吧?本游戲就是一種用C語言寫的類似的游戲,因為用手電筒照明找路,所以有點像礦工的樣子,還是叫它礦井逃生吧!(以下是游戲
    的頭像 發表于 01-07 09:41 ?1447次閱讀

    C語言項目:接球小游戲自制)!詳細思路+源碼分享

    用VS寫了一個小小的游戲,在界面右側有運行時間,接到的小球個數等信息,有 10 個小球下落,玩家可以控制一個盒子左右移動(方向鍵),來接小球,按 Esc 鍵退出,最后會顯示接到的小球的數目/分數。
    的頭像 發表于 01-09 11:00 ?911次閱讀

    C語言零基項目:打飛機游戲!300行源碼分享+詳細思路

    游戲中,你操控你的防空車盡可能的多擊落飛機,躲避飛機扔的炸彈。
    的頭像 發表于 01-11 09:31 ?1075次閱讀
    主站蜘蛛池模板: 人人艹人人艹| 日本xxxⅹ69xxxx护士| 最猛91大神ben与女教师| 亚洲www网站| 黄色软件入口| 久草一本| 在线亚洲色图| 激情免费视频| 国产精品美女一级在线观看| 国产精品高清久久久久久久| 免费 视频 1级| 美女丝袜长腿喷水gif动态图| 热久久久| 久久综合久色欧美婷婷| 久久精品久久久| 亚洲电影二区| cijilu刺激 国产免费的| 欧美性猛交xxxx乱大交| 色视频网站色视频播放| 午夜视频免费在线观看| 黄色视屏在线免费播放| 老湿成人影院| 亚洲国产成人最新精品资源| 成年大片免费播放视频人 | 久色tv| 日本三级强在线观看| 国产精品主播在线观看| 午夜啪啪免费视频| 色视频线观看在线播放| 四虎comwww最新地址| 一个色中文字幕| 最新版天堂资源官网| 男男gay高h文| 国产美女特级嫩嫩嫩bbb| 非常黄的网站| 就去干综合| 91操碰| 嫩草影院网站入口| 5566精品资源在线播放| 欧美一级黄色片视频| 国产特黄|