目录

前言

一、整体的逻辑

创建菜单

创建棋盘

打印棋盘

玩家下棋

电脑下棋

判断输赢

整合代码

game.c

test.c

game.h

总结


前言

经典数组游戏三子棋

一、整体的逻辑

1.创建菜单

2.创建棋盘

3.打印棋盘

3.玩家下棋

4.判断输赢

5.电脑下棋

6.再次判断输赢

7.返回菜单

创建菜单

void menu()
{printf("*****************************\n");printf("*********1.游戏开始**********\n");printf("*********0.退出游戏**********\n");printf("*****************************\n");}

创建棋盘

三子棋需要一个3*3的棋盘,这里我们创建了一个Board[3][3]的二维数组来当棋盘,将数组中的元素全部初识化为空格。

void InitBoard(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){Board[i][j] = ' ';}}}

打印棋盘

将棋盘打印出来,这里我们用 | 将棋盘分割成一列列的,用 --- 将棋盘分割成每一行,方便我们观看。

void DisplayBoard(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", Board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){int j = 0;for (j = 0; j < row; j++){printf("---");if (j < row - 1){printf("|");}}printf("\n");}}
}

玩家下棋

玩家将坐标输入,当坐标被占用或超出棋盘范围时,重新选择。

void PlayerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下棋,请选择坐标:>");scanf("%d%d", &x, &y);while (1){if (x >= 0 && x < row && y >= 0 && y < col){if (Board[x][y] == ' '){Board[x][y] = '*';break;}else{printf("坐标被占用,请重新选择!");}}else{printf("坐标输入错误,请重新选择!");}}
}

电脑下棋

这个地方电脑下棋比较傻了,因为是随机生成的坐标,

void ComputerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("电脑下棋\n");while (1){x = rand() % row;y = rand() % col;if (Board[x][y] == ' '){Board[x][y] = '#';break;}}
}

判断输赢

这里我将可能赢的情况列举了出来,当赢时,会返回三个坐标中的一个,然后再判断。

char IsWin(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){if (Board[i][0] == Board[i][1] && Board[i][1] == Board[i][2] && Board[i][0] != ' '){return Board[i][0];break;}}int j = 0;for (j = 0; j < col; j++){if (Board[0][j] == Board[1][j] && Board[1][j] == Board[2][j] && Board[0][j] != ' '){return Board[0][j];break;}}if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[0][0] != ' '){return Board[0][0];}if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[1][1] != ' '){return Board[1][1];}if (IsFull(Board, row, col)){return 'Q';}return 'C';
}ret = IsWin(Board, ROW, COL);if (ret != 'C'){if (ret == '*'){printf("玩家赢!!!");break;}else if (ret == '#'){printf("电脑赢!!!");break;}else{printf("平局");break;}}

整合代码

game.c

#define _CRT_SECURE_NO_WARNINGS#include"game.h"void InitBoard(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){Board[i][j] = ' ';}}}
void DisplayBoard(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", Board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){int j = 0;for (j = 0; j < row; j++){printf("---");if (j < row - 1){printf("|");}}printf("\n");}}
}void PlayerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下棋,请选择坐标:>");scanf("%d%d", &x, &y);while (1){if (x >= 0 && x < row && y >= 0 && y < col){if (Board[x][y] == ' '){Board[x][y] = '*';break;}else{printf("坐标被占用,请重新选择!");}}else{printf("坐标输入错误,请重新选择!");}}
}void ComputerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("电脑下棋\n");while (1){x = rand() % row;y = rand() % col;if (Board[x][y] == ' '){Board[x][y] = '#';break;}}
}int IsFull(char Board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (Board[i][j] == ' '){return 0;}}}return 1;
}char IsWin(char Board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){if (Board[i][0] == Board[i][1] && Board[i][1] == Board[i][2] && Board[i][0] != ' '){return Board[i][0];break;}}int j = 0;for (j = 0; j < col; j++){if (Board[0][j] == Board[1][j] && Board[1][j] == Board[2][j] && Board[0][j] != ' '){return Board[0][j];break;}}if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[0][0] != ' '){return Board[0][0];}if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[1][1] != ' '){return Board[1][1];}if (IsFull(Board, row, col)){return 'Q';}return 'C';
}

test.c

#include"game.h"void menu()
{printf("*****************************\n");printf("*********1.游戏开始**********\n");printf("*********0.退出游戏**********\n");printf("*****************************\n");}
void game()
{char ret = 0;char Board[ROW][COL] = { 0 };InitBoard(Board,ROW,COL);DisplayBoard(Board,ROW,COL);while (1){PlayerMove(Board, ROW, COL);DisplayBoard(Board, ROW, COL);ret = IsWin(Board, ROW, COL);if (ret != 'C'){if (ret == '*'){printf("玩家赢!!!\n");break;}else if (ret == '#'){printf("电脑赢!!!\n");break;}else{printf("平局\n");break;}}ComputerMove(Board, ROW, COL);DisplayBoard(Board, ROW, COL);ret = IsWin(Board, ROW, COL);if (ret != 'C'){if (ret == '*'){printf("玩家赢!!!");break;}else if (ret == '#'){printf("电脑赢!!!");break;}else{printf("平局");break;}}}
}int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 2:game2();break;case 0:printf("退出游戏!\n");break;default:printf("选择错误!请重新选择\n");break;}}while (input);return 0;
}

game.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 3
#define COL 3void InitBoard(char Board[ROW][COL], int row, int col);
void DisplayBoard(char Board[ROW][COL], int row, int col);
void PlayerMove(char Board[ROW][COL], int row, int col);
void ComputerMove(char Board[ROW][COL], int row, int col);
char IsWin(char Board[ROW][COL], int row, int col);

总结

今天终于把三子棋写了出来,明天尝试一下,让电脑不这么麻瓜。

简单小游戏------三子棋相关推荐

  1. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏

    学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...

  2. 童年小游戏三子棋(C语言数组实现)

    目录 认识游戏 游戏框架 游戏实现 基本构思 棋子 棋盘 下棋 判断输赢 效果展示 全部代码 游戏效果 认识游戏 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等 ...

  3. 用c语言实现小游戏三子棋

    小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 ​​​​​​​小结 三子棋的基本玩 ...

  4. C语言趣味小游戏——三子棋

    全篇无任何废话,本文的解释大多数都在代码段中,所以一定要看代码,边看边学边理解. 这只是初学者入门的一个小游戏,不难懂,没有什么复杂的内容 可以先学习一下比三子棋还简单的猜数字小游戏 C语言趣味小游戏 ...

  5. C语言简易小游戏--三子棋

    小时候,在学校和小伙伴除了互相追逐着玩闹玩游戏以外,相信很多小伙伴们也有和朋友在课堂上拿一张纸玩井字棋的美好回忆.(如下图酱紫啦~) 那今天呢,我们就用C语言制作一款简易的井字棋来练习一下对代码的感觉 ...

  6. 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)

    前言 今天牛牛给大家分享的是c语言实现三子棋和五子棋游戏,初学者可能有些不理解的地方,记得私信提问哦,牛牛会一 一回答的. 目录 前言 一.游戏介绍 二.游戏设计思路 2.1 主函数测试区(test. ...

  7. 第一个小游戏“三子棋”超详细

    三子棋 我们先想一下游戏是怎么玩的??? 打开游戏,进去先看到一个菜单,然后选择是玩游戏还是退出,如果选择玩游戏,那进去是我和电脑玩游戏,我下一步棋,电脑下一步棋,如果我赢了那游戏就结束了,如果电脑赢 ...

  8. 简易小游戏——三子棋

    你好,我是L-may 点我码云 提取代码 游戏介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉棋.一条龙.井字棋等.游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线 ...

  9. C语言小游戏——三子棋(井字棋)

    文章目录 前言 一.前期准备 二.游戏整体结构及思路 1.程序主体结构: 2.代码解读 3.完整源代码 总结 前言 相信大家小时候都玩过井字棋小游戏,拿石子在地上画或是用笔在纸上画······今天我们 ...

最新文章

  1. 机器学习常用算法特点概述
  2. 未来CPU内核将更简单!
  3. wxWidgets:wxChoicebook类用法
  4. 如何用excel筛选相似内容_Excel中如何将两组数据的相同内容进行快速筛选配对...
  5. python常见的文件操作:打开、创建等
  6. linux 关机 日志,centos7 异常关机了,怎么查看系统的异常日志?
  7. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...
  8. Linux在出现/java: cannot execute binary file
  9. 在文档阅读器上为 PDF 文档生成多级目录
  10. 【安全牛学习笔记】离线密码破解
  11. 【计算大于这个整数的最小质数】
  12. Oracle AutoVue 21.0.2.4 支持的文件格式
  13. PyImport_ImportModule
  14. DM数据库的启停以及数据库状态检查
  15. 信而泰OLT使用介绍-网络测试仪实操
  16. 【天池大赛】淘宝直播商品识别
  17. 计算机爱好者协会ppt,计算机协会PPT大赛
  18. 数据检索---基于Lucene索引
  19. 我爱你宠物网——创业笔记(三)
  20. 转型在即,迭创新高——重新认识BNB

热门文章

  1. linux mount 服务器,NFS服务器设置及mount命令挂载
  2. 一张彩色图片,如何用Photoshop处理成一张轮廓图(就是变成刚用铅笔画出来时的那样)_......
  3. 帮助汽贸店产业升级,乐行科技获2540万元天使轮融资
  4. python直接读取tar文件中的图片
  5. java中字符串判断相等能用不等号吗
  6. 四人追逐matlab,四人追逐问题及C程序
  7. 845GL也是可以玩魔兽争霸的,原来!
  8. Spinner 设置适配器, adapter
  9. C# 使用XmlDocument类读取XML文件
  10. TS 泛型的extends属性