当前位置: 首页 > news >正文

C语言初阶小练习2(三子棋小游戏的实现代码)

这是C语言小游戏三子棋的代码实现

test.c文件是用来测试的部分

game.h文件是用来声明我们说写出的函数

game.c文件是用来编写我们的功能实现函数部分

1.test.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{printf("*************************\n");printf("*******   1.play  *******\n");printf("*******   2.exit  *******\n");printf("*************************\n");
}void game()
{//存放玩家或者电脑的落子情况char board[ROW][COL];char ret = 0;//初始化棋盘为全空格---->用init_board函数init_board(board, ROW,COL);//打印棋盘---->print_boaardprint_board(board, ROW, COL);while (1){player_move(board, ROW, COL);//玩家下棋实现print_board(board, ROW, COL);//打印//判断输赢ret=is_win(board,ROW,COL);if (ret != 'C'){break;}computer_move(board, ROW, COL);//电脑下棋print_board(board, ROW, COL);//判断输赢ret = is_win(board, ROW, COL);if (ret != 'C'){break;}}if (ret == '#')printf("电脑赢\n");else if (ret == '*')printf("玩家赢\n");else if (ret == 'Q')printf("平局\n");
}//判断输赢
//判断输赢的代码:电脑赢了?  玩家赢了?  平局?  继续进行?
//电脑赢:#
//玩家赢:*
//平局:Q
//游戏继续:C
void test()
{srand((unsigned int)time(NULL));int input = 0;do {menu();printf("请选择:--->");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误\n");break;}} while (input);
}
int main()
{test();return 0;}

2.game.h

#pragma once
#define ROW 3 //行
#define COL 3 //列
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//头文件声明函数
//初始化棋盘
void init_board(char board[ROW][COL],int row,int col);//打印棋盘
void print_board(char board[ROW][COL], int row, int col);//玩家下棋
void player_move(char board[ROW][COL],int row,int col);//电脑下棋
void computer_move(char board[ROW][COL], int row, int col);//判断输赢的函数
char is_win(char board[ROW][COL], int row, int col);

3.game.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include"game.h"//棋盘初始化函数
void init_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] = ' ';}}
}//打印棋盘函数
void print_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);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){//printf("---|---|---\n");int j = 0;for (j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}void player_move(char board[ROW][COL], int row, int col)
{printf("玩家下棋\n");while (1){printf("请输入要输入的坐标-->");int x = 0;//行int y = 0;//列scanf("%d %d", &x, &y);//坐标合法,输入坐标if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else//坐标非法{printf("坐标非法\n");}}
}
//电脑下棋
//随机生成坐标,只要坐标没有被占用,就下棋
void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋\n");while (1){int x = rand() % row;int y = rand() % col;//是否占用坐标if (board[x][y] == ' '){board[x][y] = '#';break;}}
}//只希望is_full函数只用来支持is_win函数,只是在id_win函数内部使用
// 没必要在头文件中声明
//判断棋盘是否满了的函数
static int is_full(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 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][0] != ' '){return board[i][0];}}//判断三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][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];}//平局?(棋盘满没满)if (is_full(board, row, col) == 1){return'Q';}//继续//没有玩家或者电脑赢,也没有平局,游戏继续return 'C';
}

http://www.lryc.cn/news/465271.html

相关文章:

  • 金融行业合同管理如何利用AI技术进行风险预警?
  • 世界数字农业盛宴与技术探索,25年3月聚焦世界灌溉科技大会
  • 二百六十九、Kettle——ClickHouse清洗ODS层原始数据增量导入到DWD层表中
  • Maya---骨骼绑定
  • 携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议
  • 牛客周赛63
  • git restore恢复删除文件
  • MacOS13虚拟机VMware Workstation Pro 16安装
  • docker 数据管理,数据持久化详解 一
  • 【ios】使用TestFlight将app分发给测试人员(超详细)
  • 证件照小程序源码,前后端稳定运行
  • java白嫖同事的从身份证里面提取省市区地址详细信息的工具类代码
  • 计算机网络基本架构示例2
  • 无人机之室内定位技术篇
  • 在ubuntu20.04中输入不存在shell命令时,报错ModuleNotFoundError的解决方案
  • 互联网语言 互联网开发 互联网架构
  • 解决MybatisPlus updateById更新数据时将没传的数据也更新成了null
  • OpenWRT 和 Padavan 路由器配置网络打印机 实现远程打印
  • R语言机器学习教程大纲
  • java如何部署web后端服务
  • 第八课 Vue中的v-bind指令
  • 基于STM32的智能电能表设计
  • 开启学习与探索之旅,自闭症学校全托为孩子打造温馨成长环境
  • 多线程编程简单例题(3个线程) Linux环境 C语言实现
  • UG NX12.0建模入门笔记:1.2 鼠标的基本操作
  • NVME盘未格式化导致Ubuntu20.04启动慢
  • VSCode创建插件HelloWorld找不到指令解决办法
  • 第20场 小白入门赛本场比赛为「蓝桥·算法双周赛」第二十场分级赛——小白入门赛
  • 论文研读 | End-to-End Object Detection with Transformers
  • 构建高效在线教育平台:Spring Boot的力量