iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于C语言实现钻石棋游戏的示例代码
  • 792
分享到

基于C语言实现钻石棋游戏的示例代码

摘要

目录游戏规则实现代码游戏规则 这是一个单人钻石棋游戏,游戏中有两种颜色的棋子:红色和绿色。每个玩家在游戏进行中轮流选择一个空格,并在该空格上放置自己的棋子。游戏的目的是尽可能地连成一

游戏规则

这是一个单人钻石棋游戏,游戏中有两种颜色的棋子:红色和绿色。每个玩家在游戏进行中轮流选择一个空格,并在该空格上放置自己的棋子。游戏的目的是尽可能地连成一条长的直线,使该直线的颜色与你的棋子颜色相同。如果所有格子都被填满,游戏将结束。最后,显示游戏结束的消息。注意:不能在已经被占用的格子上放置棋子。游戏胜利条件

胜利的条件是在棋盘上连成一条长度大于或等于5个格子的直线,且该直线上所有格子的颜色都相同。当一方玩家连成胜利直线后,游戏将结束并显示游戏结束的消息。

实现代码

#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, "游戏结束");
  _getch();
  closegraph();
  return 0;
}

到此这篇关于基于C语言实现钻石棋游戏的示例代码的文章就介绍到这了,更多相关C语言钻石棋游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于C语言实现钻石棋游戏的示例代码

本文链接: https://www.lsjlt.com/news/197561.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于C语言实现钻石棋游戏的示例代码
    目录游戏规则实现代码游戏规则 这是一个单人钻石棋游戏,游戏中有两种颜色的棋子:红色和绿色。每个玩家在游戏进行中轮流选择一个空格,并在该空格上放置自己的棋子。游戏的目的是尽可能地连成一...
    99+
    2023-02-26
    C语言实现钻石棋游戏 C语言钻石棋游戏 C语言钻石棋 C语言游戏
  • 基于C语言如何实现钻石棋游戏
    这篇文章主要介绍了基于C语言如何实现钻石棋游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于C语言如何实现钻石棋游戏文章都会有所收获,下面我们一起来看看吧。游戏规则这是一个单人钻石棋游戏,游戏中有两种颜色的...
    99+
    2023-07-05
  • 基于C语言实现三子棋游戏的示例代码
    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于...
    99+
    2022-11-13
  • C语言实现三子棋游戏的示例代码
    目录1. 前言2. 准备工作3. 使用二维数组存储下棋的数据4. 初始化棋盘为全空格5. 打印棋盘6. 玩家下棋7. 电脑下棋8. 判断输赢9. 效果展示10. 完整代码game.h...
    99+
    2022-11-13
    C语言三子棋游戏 C语言三子棋 C语言 游戏
  • 基于C语言实现迷宫游戏的示例代码
    目录C语言迷宫游戏定义地图打印地图方法一打印地图方法二定义起点和终点位置实现读取按键实现小球下向下移动一步总结小球移动规律实现重新打印地图实现连续移动实现小球下向上下左右移动实现小球...
    99+
    2022-11-13
  • C语言实现三子棋小游戏的示例代码
    目录一、三子棋1.演示效果2.完整代码二、代码解析1.初始化棋盘2.打印棋盘3.玩家下棋4.电脑下棋5.判断输赢6.游戏主体函数7.菜单函数8.头文件及主函数一、三子棋 三子棋小游戏...
    99+
    2022-11-13
    C语言三子棋游戏 C语言三子棋 C语言 游戏
  • 基于C语言实现关机小游戏的示例代码
    目录关机会写吧猜数字会写吧那么合起来实际效果关机会写吧 #include <stdlib.h> #include <string.h> #include &l...
    99+
    2022-11-13
  • 基于Python实现围棋游戏的示例代码
    目录1.导入模块2.初始化棋盘3. 开始游戏4.放弃当前回合落子5.悔棋判断6.重新开始7.右侧太极图的设置8.落子设置9.吃子规则判定设置10.其他11.程序入口12.效果图文件自...
    99+
    2022-11-11
  • 基于C语言实现三子棋游戏
    说到三子棋,我想大家一定不陌生吧,它也是我童年中的一部分,今天我们用C语言来实现一下简易版的三子棋。 首先,介绍一下游戏规则: 1.在一个九宫格上进行下棋; 2.玩家两名,双方先后落...
    99+
    2022-11-12
  • 基于C语言实现井字棋游戏
    井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数组元素是否相同即可.具体我们可以分为以下几...
    99+
    2022-11-12
  • 基于C语言实现三子棋游戏的代码怎么写
    这篇“基于C语言实现三子棋游戏的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C语言实现三子棋游戏的代码怎么写...
    99+
    2023-07-02
  • 基于C语言实现见缝插针游戏的示例代码
    目录游戏说明亮点期待效果图代码游戏说明 使用鼠标左键点击发射针,当两个针的夹角小于一定限制时,游戏结束。 亮点 这个游戏比较创新的地方就是可以用鼠标控制一个动态的过程,在循环中使用鼠...
    99+
    2022-11-13
    C语言 见缝插针游戏 C语言见缝插针 C语言 游戏
  • 基于C语言实现三子棋小游戏
    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路。          ...
    99+
    2022-11-12
  • C语言实现经典小游戏井字棋的示例代码
    目录前言一、井字棋游戏的主流程二、游戏部分1.游戏函数2.初始化棋盘3.打印棋盘4.玩家下棋5.电脑下棋(两个难度等级)6.判断游戏是否结束三、 运行展示四、源码展示前言 这是我在学...
    99+
    2022-11-13
    C语言井字棋游戏 C语言 井字棋 C语言 游戏
  • C语言代码实现井字棋游戏
    井字棋是一个很常见的小游戏。要求对战双方在一个“井”形的棋盘里分别下“*”棋子或者“#”棋子,谁先连成3个,谁就赢。 本次使用C语言来实现这个小游戏。 由于使用函数较多,所以采用多文...
    99+
    2022-11-12
  • 基于C语言实现简易三子棋游戏
    用C语言写三子棋的具体代码,供大家参考,具体内容如下 1、头文件 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
    99+
    2022-11-12
  • 基于C语言实现简单五子棋游戏
    本文实例为大家分享了C语言实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 五子棋大家都玩儿过,所以规则就不介绍了 今天遇到一个学弟在实现的时候遇到一些问题,所以将实现的过程记...
    99+
    2022-11-13
  • 基于C语言实现简单的五子棋游戏
    这是一个用C语言实现的控制台小游戏—-五子棋,棋盘大小和获胜棋子数目是用宏定义的,可以自定义,所以可以轻松改为三子棋、六子棋等等。此游戏设定为人机对战(PVE),电脑走棋...
    99+
    2022-11-13
  • 基于C语言自制华容道游戏的示例代码
    目录程序简介程序执行效果完整源代码程序简介 华容道,画风参考的是手机程序:超级华容道。玩法是将大块移动至下层的中间。随机盘面,难度适中,自动解题。 程序随机了横块纵块数量,所以会有无...
    99+
    2023-03-20
    C语言实现华容道游戏 C语言华容道 C语言游戏
  • 用C语言实现井字棋游戏代码
    目录前言首先得确定程序实现的功能直接上代码:1. 菜单界面2. 棋盘打印3. 玩家下棋4. 电脑下棋(智障下棋版,毫无智能)5. 判断输赢搞定总结前言 我们都玩过或见过这样一种简单地...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作