c语言代码练习(小游戏)24
需求:井字棋
第一个文件:game.h
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> #pragma once #define ROW 3 #define LOC 3 void IntBoard(char arr[ROW][LOC], int rot, int loc);//声明函数 void DisplayBoard(char[ROW][LOC], int rot, int loc); void PlayMove(char board[ROW][LOC], int rot, int loc); void ComputerMove(char board[ROW][LOC], int rot, int loc); char IsMin(char board[ROW][LOC],int rot,int loc);
第二个文件:gane.c
#include "game.h" void IntBoard(char board[ROW][LOC], int row, int loc) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < loc; j++) { board[i][j] = ' '; } } } void DisplayBoard(char board[ROW][LOC], int row, int loc) { int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < loc; j++) { printf(" %c ", board[i][j]);//打印一行数据 if (j < loc - 1) { printf("|"); } } printf("\n"); if (i < row - 1) { for (j = 0; j < loc; j++) { printf("---"); if (j < loc - 1) printf("|"); } printf("\n"); } } } void PlayMove(char board[ROW][LOC], int row, int loc) { int x = 0; int y = 0; printf("玩家走:\n"); printf("请输入你要下的坐标(先输入横坐标确定后在输入纵坐标):"); while (1) { scanf("%d%d", &x, &y); if (x > 0 && x <= row && y > 0 && y <= loc) { if (board[x-1][y-1] == ' ') { board[x - 1][y - 1] = '*'; break; } else { printf("输入的下标位置已经被占据了"); } } else { printf("语法错误,请重新输入。"); } } } void ComputerMove(char board[ROW][LOC], int roe, int loc) { int x = 0; int y = 0; printf("电脑走:\n"); while(1) { int x = 0; int y = 0; x = rand() % 3; y = rand() % 3; if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } //返回1表示棋盘满了 //返回0,表示棋盘没满 int IsFull(char board[ROW][LOC], int row, int loc) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < loc; j++) { if (board[i][j] == ' ') { return 0; } } } return 1; } char IsMin(char board[ROW][LOC], int row, int loc) { 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]; } } //竖三列 for (i = 0; i < loc; i++) { 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[2][0] == board[1][1] && board[2][0]==board[0][2]&&board[2][0]!=' ') { return board[1][1]; } if (1 == IsFull(board, ROW, LOC)) { return 'Q'; } return 'c'; }
第三个文件:test.c
#include "game.h" int menu() { printf("##############################\n"); printf("##### 1,play 0,exit #####\n"); printf("##############################\n"); return 0; } //游戏算法的实现 void ayue1() { int ret = 0; //数组-存放走出的棋盘信息 char board[ROW][LOC] = {0}; //初始化棋盘 IntBoard(board, ROW, LOC); //打印棋盘 DisplayBoard(board, ROW, LOC); //下棋 while (1) { //玩家下棋 PlayMove(board,ROW,LOC); DisplayBoard(board, ROW, LOC); //判断玩家赢 //电脑下棋 ret = IsMin(board,ROW,LOC); if (ret != 'c') { break; } ComputerMove(board, ROW, LOC); DisplayBoard(board, ROW, LOC); //判断电脑赢 ret = IsMin(board, ROW, LOC); if (ret != 'c') { break; } } if (ret == '*') { printf("玩家赢"); } if (ret == '#') { printf("电脑赢"); } if (ret == 'Q') { printf("平局"); } } int test() { int input = 0; do { menu();//菜单:menu printf("请选择:"); scanf("%d", &input); switch (input) { case 1: printf("井字棋游戏\n"); ayue1(); break; case 0: printf("退出游戏\n"); break; default : printf("输入超过范围,请重新输入\n"); break; } } while (input); return 0; } int main() { srand((unsigned int)time(NULL)); test(); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库