目录

一.前言

二.主体框架

三.游戏内容的实现

四.结语


一.前言

想必大家在小时候或多或少的都接触过井字棋吧,那么今天我就来带大家了解如何在编程中实现这一游戏吧。

二.主体框架

#include <stdio.h>void menu()
{printf("********************\n");printf("*****  1.play  *****\n");printf("*****  0.exit  *****\n");printf("********************\n");
}int main()//要运行游戏我们先创建一个主函数
{int input = 0;do{menu();//在游戏开始前先给出一个优美的游戏界面printf("欢迎来到三子棋游戏,请选择:\n");printf("输入1开始游戏,输入0结束游戏\n");//提示玩家如何开始游戏scanf("%d", &input);switch (input){case 1:printf("游戏开始\n");game();//游戏主体break;//当输入1时,玩家就会开始游戏,在游戏进行完后跳出循环case 0:printf("游戏已退出\n");break;//当输入0时,玩家退出default:printf("输入错误,请重新输入\n");//输入其他值时,返回输入阶段}}while (input);//当输入为0(假)时循环结束,当输入非0(真)时循环再次进行
}

在主体执行逻辑完成后我们再对具体的游戏主体再做设计。

三.游戏内容的实现

井字棋的游戏步骤大致为下

#include <stdio.h>
#define ROW 3
#define COL 3
//在这里使用宏定义可以方便之后对数据进行修改,不用再对后面的多个地方进行改动void game()
{char board[ROW][COL];//生成棋盘ini_board(board, ROW, COL);//1.初始化棋盘printf_board(board, ROW, COL);//2.打印棋盘while(1)//玩家和电脑下棋步骤{player_move(board, ROW, COL);//3.玩家下棋printf_board(board, ROW, COL);char ret = is_win(board, ROW, COL);//5.判断是否有人胜出if (ret != 'C'){break;}computer_move(board, ROW, COL);//4.电脑下棋printf_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}}char ret = is_win(board, ROW, COL);judge(ret);//6.判定游戏结果
}

在这之中我们将具体化各个步骤,设计出相应的函数

1.初始化棋盘

void ini_board(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] = ' ';//对每一元素进行操作,使他们的内容都为一个' '空字符}}
}

2.打印棋盘

void printf_board( char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++)//对每行元素进行操作{printf("   |   |   \n");//一行仅有三个元素将其一一包围在由' '形成的九宫格正中,且不同元素间用'|'间隔开来printf(" %c | %c | %c \n", board[i][0],board[i][1],board[i][2]);printf("   |   |   \n");if(i < col-1)//每行元素间以'-'与'|'分割,且最后一行之后无需再做分割{printf("---|---|---\n");}}
}

运行到此处时的效果如下

3.玩家下棋

void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下棋\n");printf("请输入下棋位置:");while (1)//万一玩家输入错误,可以不断循环,直到玩家输入正确{scanf("%d %d", &x, &y);//输入玩家想下的坐标if (x <= 3 && y <= 3 && x >= 1 && y >= 1){//玩家是不知道数组元素的下标是从0开始的,因此在输入时需要判定输入值是否在1-3之间//而不是在0-2之间if (board[x - 1][y - 1] == ' ')//只有在此元素未是' '时,才准许玩家下在此处{board[x - 1][y - 1] = '*';//玩家下棋使对应元素被*占据break;//在玩家输入正确后退出循环}else{printf("坐标已被占用,请重新输入:");//此时玩家所输入的坐标已被*或#占用}}else{printf("坐标非法,请重新输入:");//此时玩家所输入的坐标不在1-3这个范围内}}
}

运行起来如下图

    

4.电脑下棋

void computer_move(char board[ROW][COL], int row, int col)
{srand((unsigned int)time(NULL));//通过时间戳来获取伪随机值printf("电脑下棋\n");while (1){int x = rand() % 3;//获得0-2的随机数int y = rand() % 3;if (board[x][y] == ' ')//只有当对应元素为' '时才进行落子替换{board[x][y] = '#';//将' '替换成#break;//结束循环}}
}

5.判断结果

在这里我们规定根据不同情况返回不同的值(表示不同含义)

//* - 玩家获胜        //# - 电脑获胜        //Q - 平局        //C - 没有输赢游戏继续

char is_win(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][1] != ' ')return board[i][1];//对每列是否有三个元素相同且连成一条线if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')return board[1][i];//对两条对角线是否有三个元素相同且连成一条线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')return board[1][1];if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')return board[1][1];}//判定是否所有元素都被占据,即判断是否还有元素为' '//若还有的话说明棋局还未结束for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){if (board[i][j] == ' ')return 'C';}}//以上条件均不满足时,说明所有位置均被占据且没有赢家,即平局return 'Q';
}
void judge(int ret)
{if (ret == '*')printf("玩家获胜\n");if (ret == '#')printf("电脑获胜\n");if (ret == 'Q')printf("平局\n");
}

至此我们便完成了井字棋的制作(虽然电脑看起来不是很聪明的样子)。

四.结语

此次我们研究了井字棋的运行方式,希望读者能从中获取到一定知识。

趣味小游戏——井字棋相关推荐

  1. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”

    原标题:用C语言编写小游戏--"井字棋" 作者:Milo Yip 来源:知乎 原文链接:https://zhuanlan.zhihu.com/p/39581573 在 Milo Y ...

  2. C++ 小游戏 井字棋

    c++井字棋小游戏,里面有人机对战 和 双人对战 先创建一个游戏类 #pragma once #include<iostream> #include<vector> #incl ...

  3. javafx写一个小游戏-井字棋

    学了几天的javafx,感觉非常好用,自己写了一个小游戏,如有不足,希望大佬加以指正,谢谢. 1.先写UI界面 新建一个ui.fxml文件,用于显示ui界面 界面效果如下: 代码如下: <?xm ...

  4. python小游戏井字棋(人机对战)

    游戏简介:在九宫格内进行,如果一方抢先于另一方向(横.竖.斜)连成3子,则获得胜利.游戏中输入方格位置代号的形式如下: 设计前的思路: 游戏中,board棋盘存储玩家.计算机的落子信息,未落子处未EM ...

  5. vb小游戏——井字棋

    欠了一个星期的小游戏..我得补一补.以下效果图: 特别简单,其实学一段就能做的小东西,愣是给我拖了不知道多久orz 新手初学,错误和不好的习惯请一定要纠正我.Thanks♪(・ω・)ノ 以下实现方法: ...

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

    1.自定义game.h头文件 #pragma once#include <stdio.h>//符号定义 #define Row 3 #define Col 3//函数声明//棋盘 void ...

  7. 用IE网页学游戏-井字棋

    IE网页学游戏-井字棋 井字棋实现交互的简单小游戏,学习使用表格,理解javascript函数. 1.构造棋盘 用table元素的行列构造三行三列的表格.设置好120像素的井字棋背景,三个小图表示方格 ...

  8. python写井字棋_python 游戏(井字棋)

    1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠. 2. 使用模块和游戏提示 impor ...

  9. 【C语言】(实例游戏)实现童年游戏——井字棋

    初学C语言,虽然学到的内容不是很多,但是有一些简单的同年游戏我们是可以实现的,接下来,我们就看一下井字棋的实现,首先创建3个文件,分别为头文件 --定义与声明 函数的实现  以及测试文件 首先我们先说 ...

  10. C语言小项目——井字棋游戏(升级版)

最新文章

  1. linux 唯一行数量,linux – 确定bash中具有awk或类似内容的唯一行数
  2. 运维-nginx +php 错误状态码说明
  3. opengl加载显示3D模型ogex类型文件
  4. HttpRequest 类
  5. 简单的多线程实例下载(供初学者下载学习)
  6. 大学编程python_大学生想学一门编程语言傍身,Python可以吗?
  7. Numpy系列(七)求解线性方程组、计算逆矩阵求解线性方程组
  8. 获取CPU、硬盘、主板序列号及MAC地址工具类
  9. Hi3559a移植Opencv3.0
  10. 软件工程师:机器学习也需要学习?
  11. dr.oracle黑钻面膜,dr.diamond是什么牌子?dr.diamond钻石面膜怎么样?
  12. 【3本精挑细选的书籍】网络爬虫推荐书籍(Python)【从0到实践】
  13. win7电脑提升开机速度方法
  14. NGUI Sprite的各种Type(Simple、Sliced、Tiled、Filed、Advanced)
  15. SSD(ECCV 2016)
  16. 解决外网与内网或内网之间的通信,NAT穿透
  17. 链家租房市场分析(R爬虫、数据可视化)
  18. cuda编译错误 ptxas fatal : Unresolved extern function xxxx
  19. Win-TortoiseGit-使用之-合并代码
  20. svn 锁死解除方案

热门文章

  1. BZOJ4198: [Noi2015]荷马史诗(哈夫曼树)
  2. AI插件开发入门教程001 - AI脚本简介
  3. 将excel中的列转置成行
  4. Java读取Oracle中LONG类型数据
  5. js获取USB扫码枪数据
  6. 在美国租房子需要考虑什么问题?
  7. 自建cdn搭建_在自己的服务器上搭建CDN加速服务的教程
  8. npm run dev的实质
  9. python发送超大附件邮件_【Python】发送邮件功能浅析
  10. 调用高德地图、百度地图客户端