最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C語言實現(xiàn)鉆石棋游戲的示例代碼

 更新時間:2023年02月26日 10:17:58   作者:編程小魚六六六  
獨立鉆石是源于18世紀法國的宮廷貴族的自我挑戰(zhàn)類單人棋游戲,可以鍛煉邏輯思維能力。本文將用C語言實現(xiàn)這一簡單的游戲,感興趣的小伙伴可以了解一下

游戲規(guī)則

這是一個單人鉆石棋游戲,游戲中有兩種顏色的棋子:紅色和綠色。每個玩家在游戲進行中輪流選擇一個空格,并在該空格上放置自己的棋子。游戲的目的是盡可能地連成一條長的直線,使該直線的顏色與你的棋子顏色相同。如果所有格子都被填滿,游戲?qū)⒔Y(jié)束。最后,顯示游戲結(jié)束的消息。注意:不能在已經(jīng)被占用的格子上放置棋子。游戲勝利條件

勝利的條件是在棋盤上連成一條長度大于或等于5個格子的直線,且該直線上所有格子的顏色都相同。當一方玩家連成勝利直線后,游戲?qū)⒔Y(jié)束并顯示游戲結(jié)束的消息。

實現(xiàn)代碼

#define _CRT_SECURE_NO_WARNINGS
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
#define ROWS 8
#define COLUMNS 8
#define CELL_SIZE 50
 
int board[ROWS][COLUMNS];
 
void init_board() {
  for (int i = 0; i < ROWS; i++) {
    for (int j = 0; j < COLUMNS; j++) {
      board[i][j] = rand() % 3;
    }
  }
}
 
void draw_board() {
  for (int i = 0; i <= ROWS; i++) {
    line(0, i * CELL_SIZE, COLUMNS * CELL_SIZE, i * CELL_SIZE);
  }
  for (int i = 0; i <= COLUMNS; i++) {
    line(i * CELL_SIZE, 0, i * CELL_SIZE, ROWS * CELL_SIZE);
  }
  for (int i = 0; i < ROWS; i++) {
    for (int j = 0; j < COLUMNS; j++) {
      if (board[i][j] == 1) {
        setfillcolor(RED);
        fillcircle(j * CELL_SIZE + CELL_SIZE / 2, i * CELL_SIZE + CELL_SIZE / 2, CELL_SIZE / 2 - 5);
      }
      else if (board[i][j] == 2) {
        setfillcolor(GREEN);
        fillcircle(j * CELL_SIZE + CELL_SIZE / 2, i * CELL_SIZE + CELL_SIZE / 2, CELL_SIZE / 2 - 5);
      }
    }
  }
}
 
bool check_valid_move(int row, int col) {
  return row >= 0 && row < ROWS && col >= 0 && col < COLUMNS && board[row][col] == 0;
}
 
bool make_move(int row, int col, int player) {
  if (check_valid_move(row, col)) {
    board[row][col] = player;
    return true;
  }
  return false;
}
 
bool check_game_over() {
  for (int i = 0; i < ROWS; i++) {
    for (int j = 0; j < COLUMNS; j++) {
      if (board[i][j] == 0) {
        return false;
      }
    }
  }
  return true;
}
int check_win(int row, int col) {
  int i, j, color = board[row][col];
  // 檢查該點所在行是否有5個相連的棋子
  for (i = row - 4; i <= row; i++) {
    if (i >= 0 && i + 4 < ROWS) {
      int count = 0;
      for (j = i; j <= i + 4; j++) {
        if (board[j][col] == color) {
          count++;
        }
      }
      if (count == 5) {
        return 1;
      }
    }
  }
  // 檢查該點所在列是否有5個相連的棋子
  for (i = col - 4; i <= col; i++) {
    if (i >= 0 && i + 4 < COLUMNS) {
      int count = 0;
      for (j = i; j <= i + 4; j++) {
        if (board[row][j] == color) {
          count++;
        }
      }
      if (count == 5) {
        return 1;
      }
    }
  }
  // 檢查該點所在主對角線是否有5個相連的棋子
  for (i = row - 4, j = col - 4; i <= row && j <= col; i++, j++) {
    if (i >= 0 && i + 4 < ROWS && j >= 0 && j + 4 < COLUMNS) {
      int count = 0;
      int x, y;
      for (x = i, y = j; x <= i + 4 && y <= j + 4; x++, y++) {
        if (board[x][y] == color) {
          count++;
        }
      }
      if (count == 5) {
        return 1;
      }
    }
  }
  // 檢查該點所在副對角線是否有5個相連的棋子
  for (i = row - 4, j = col + 4; i <= row && j >= 0; i++, j--) {
    if (i >= 0 && i + 4 < ROWS && j >= 0 && j - 4 < COLUMNS) {
      int count = 0;
      int x, y;
      for (x = i, y = j; x <= i + 4 && y >= j - 4; x++, y--) {
        if (board[x][y] == color) {
          count++;
        }
      }
      if (count == 5) {
        return 1;
      }
    }
  }
  return 0;
}
 
 
 
int main()
{
  srand(time(0));
  init_board();
  initgraph(COLUMNS * CELL_SIZE + 100, ROWS * CELL_SIZE + 100);
  draw_board();
  settextcolor(DARKGRAY);
  settextstyle(20,0,_T("宋體"));
  outtextxy(COLUMNS * CELL_SIZE - 200, ROWS * CELL_SIZE+20, "公眾號:C語言研究");
  int player = 1;
  ExMessage m;
  while (!check_game_over()) {
    m = getmessage(EX_MOUSE | EX_KEY);
    if (m.message == WM_LBUTTONDOWN)
    {
      int x = m.x;
      int y = m.y;
      int row = y / CELL_SIZE;
      int col = x / CELL_SIZE;
      if (make_move(row, col, player))
      {
 
        draw_board();
        if (check_win(row, col))
        {
          settextstyle(64, 0, "黑體");
          const char *player_string;
          if (player == 1) {
            player_string = "紅棋";
          }
          else {
            player_string = "綠棋";
          }
          char win_message[100];
          strcpy(win_message, "玩家");
          strcat(win_message, player_string);
          strcat(win_message, "獲勝!");
          outtextxy(COLUMNS * CELL_SIZE / 2 - 100, ROWS * CELL_SIZE / 2 - 50, win_message);
          _getch();
          closegraph();
          return 0;
        }
        player = player == 1 ? 2 : 1;
      }
    }
  }
  settextstyle(64, 0, "黑體");
  outtextxy(COLUMNS * CELL_SIZE / 2 - 100, ROWS * CELL_SIZE / 2 - 100, "游戲結(jié)束");
  _getch();
  closegraph();
  return 0;
}

到此這篇關(guān)于基于C語言實現(xiàn)鉆石棋游戲的示例代碼的文章就介紹到這了,更多相關(guān)C語言鉆石棋游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenGL實現(xiàn)貝塞爾曲線或曲面

    OpenGL實現(xiàn)貝塞爾曲線或曲面

    這篇文章主要為大家詳細介紹了OpenGL實現(xiàn)貝塞爾曲線或曲面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言求矩陣的各列元素之和的代碼示例

    C語言求矩陣的各列元素之和的代碼示例

    這篇文章主要介紹了C語言求矩陣的各列元素之和的代碼示例,這也是經(jīng)常作為競賽和計算機專業(yè)考試的基礎(chǔ)練習出現(xiàn)的題目,需要的朋友可以參考下
    2016-07-07
  • 解析Linux下C++編譯和鏈接

    解析Linux下C++編譯和鏈接

    編譯&鏈接對C&C++程序員既熟悉又陌生,熟悉在于每份代碼都要經(jīng)歷編譯&鏈接過程,陌生在于大部分人并不會刻意關(guān)注編譯&鏈接的原理。本文通過開發(fā)過程中碰到的四個典型問題來探索64位linux下C++編譯&鏈接的那些事。
    2021-05-05
  • Qt5.14.2使用虛擬鍵盤的關(guān)鍵代碼

    Qt5.14.2使用虛擬鍵盤的關(guān)鍵代碼

    對于Qwidget程序,使用qtvirtualkeyboard彈出鍵盤之后,鍵盤會浮于表面。使用VirtualkeyboardPushView模塊,自動根據(jù)情況把輸入視圖往上面推移,這篇文章主要介紹了Qt5.14.2使用虛擬鍵盤的關(guān)鍵代碼,需要的朋友可以參考下
    2022-09-09
  • Matlab利用隨機森林(RF)算法實現(xiàn)回歸預(yù)測詳解

    Matlab利用隨機森林(RF)算法實現(xiàn)回歸預(yù)測詳解

    這篇文章主要為大家詳細介紹了Matlab如何利用隨機森林(RF)算法實現(xiàn)回歸預(yù)測,以及自變量重要性排序的操作,感興趣的小伙伴可以了解一下
    2023-02-02
  • C++中rapidjson組裝繼續(xù)簡化的方法

    C++中rapidjson組裝繼續(xù)簡化的方法

    今天小編就為大家分享一篇關(guān)于C++中rapidjson組裝繼續(xù)簡化的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++棧的數(shù)組實現(xiàn)代碼

    C++棧的數(shù)組實現(xiàn)代碼

    這篇文章主要介紹了C++棧的數(shù)組實現(xiàn)方式,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 純c語言優(yōu)雅地實現(xiàn)矩陣運算庫的方法

    純c語言優(yōu)雅地實現(xiàn)矩陣運算庫的方法

    本文主要介紹了純c語言優(yōu)雅地實現(xiàn)矩陣運算庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言基礎(chǔ)之二分查找知識最全匯總

    C語言基礎(chǔ)之二分查找知識最全匯總

    這篇文章主要介紹了C語言基礎(chǔ)之二分查找知識最全匯總,文中有非常詳細的二分查找基礎(chǔ)知識詳解,對正在學(xué)習C語言基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • C++自動析構(gòu)時的順序問題

    C++自動析構(gòu)時的順序問題

    這篇文章主要介紹了C++自動析構(gòu)時的順序,通過實例代碼給大家講解了C++ 構(gòu)造與析構(gòu)的執(zhí)行順序,代碼簡單易懂,非常不錯對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

梧州市| 竹北市| 张家川| 德化县| 岳池县| 遂宁市| 安龙县| 岢岚县| 怀宁县| 湖口县| 萝北县| 安泽县| 米林县| 合水县| 清镇市| 邵武市| 安达市| 乌恰县| 都江堰市| 来凤县| 珲春市| 南城县| 天台县| 精河县| 宿松县| 盐亭县| 休宁县| 井研县| 房产| 义马市| 靖宇县| 宿松县| 沅陵县| 颍上县| 德保县| 乌兰县| 松溪县| 天门市| 小金县| 景东| 宁武县|