三子棋 小游戏
来源:互联网 发布:零成本营销软件 编辑:程序博客网 时间:2024/06/05 20:01
对c语言有了初步的认识,就尝试写了小游戏,三子棋,个人觉得三子棋的算法还有待提高,电脑落棋靠随机值,但没有更智能的堵并且下直线,算法方便还请多多指教!
现在上代码:
game.h
#ifndef _GAME_H_
#define _GAME_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define _GAME_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define ROW 3
#define COL 3
#define COL 3
void InitBoard(char board[ROW][COL], int row, int col);
void PrintBoard(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 CheckWin(char board[ROW][COL], int row, int col);
int Full(char board[ROW][COL], int row, int col);
void PrintBoard(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 CheckWin(char board[ROW][COL], int row, int col);
int Full(char board[ROW][COL], int row, int col);
#endif //_GAME_H_
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
int m = 0;
int n = 0;
void InitBoard(char board[ROW][COL], int row, int col)
{
memset(board, ' ', col*row*sizeof(char));
}
void PrintBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < ROW; i++)
{
printf(" %c | %c | %c ", board[i][0], board[i][1], board[i][2]);
printf("\n");
if (i != 2)
printf("---|---|---\n");
}
#include "game.h"
int m = 0;
int n = 0;
void InitBoard(char board[ROW][COL], int row, int col)
{
memset(board, ' ', col*row*sizeof(char));
}
void PrintBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < ROW; i++)
{
printf(" %c | %c | %c ", board[i][0], board[i][1], board[i][2]);
printf("\n");
if (i != 2)
printf("---|---|---\n");
}
}
void PlayerMove(char board[ROW][COL], int row, int col)
{
void PlayerMove(char board[ROW][COL], int row, int col)
{
printf("请输入坐标:>\n");
scanf("%d%d", &m, &n);
m--;
n--;
while (1) //保证玩家输入,输入错误仍可继续输入,直到输入正确为止
{
if ((m >= 0) && (m <= 2) && (n <= 2) && (n >= 0)) //判断输入是否越界
{
if (board[m][n] == ' ') //判断位置是否已被占用
{
board[m][n] = 'X';
break;
scanf("%d%d", &m, &n);
m--;
n--;
while (1) //保证玩家输入,输入错误仍可继续输入,直到输入正确为止
{
if ((m >= 0) && (m <= 2) && (n <= 2) && (n >= 0)) //判断输入是否越界
{
if (board[m][n] == ' ') //判断位置是否已被占用
{
board[m][n] = 'X';
break;
}
else //被占用 输入错误
printf("输入错误,请重新输入\n");
else //被占用 输入错误
printf("输入错误,请重新输入\n");
}
else //越界 输入错误
{
printf("输入错误,请重新输入\n");
}
}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = 'O';
break;
}
else //越界 输入错误
{
printf("输入错误,请重新输入\n");
}
}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = 'O';
break;
}
}
}
int 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 1;
}
}
return 0;
}
char CheckWin(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];
int 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 1;
}
}
return 0;
}
char CheckWin(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[0][0] != ' ')
return board[0][0];
if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && board[0][2] != ' ')
return board[0][2];
return ' ';
}
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[0][2] != ' ')
return board[0][2];
return ' ';
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<time.h>
#include<stdlib.h>
#include "game.h"
int main()
{
{
char board[ROW][COL];
char ret = 0;
int a = 0;
InitBoard(board, ROW, COL);
PrintBoard(board, ROW, COL);
while (1)
{
printf("玩家走:>");
printf("\n");
PlayerMove(board, ROW, COL);
PrintBoard(board, ROW, COL);
if (Full(board, ROW, COL) == 0)
{
printf("平局\n");
break;
}
if (CheckWin(board, ROW, COL) != ' ')
{
printf("电脑赢\n");
break;
}
printf("电脑走:>");
printf("\n");
ComputerMove(board, ROW, COL);
PrintBoard(board, ROW, COL);
if (Full(board, ROW, COL) == 0)
{
printf("平局\n");
break;
}
if (CheckWin(board, ROW, COL) != ' ')
{
printf("电脑赢\n");
break;
}
}
system("pause");
return 0;
}
char ret = 0;
int a = 0;
InitBoard(board, ROW, COL);
PrintBoard(board, ROW, COL);
while (1)
{
printf("玩家走:>");
printf("\n");
PlayerMove(board, ROW, COL);
PrintBoard(board, ROW, COL);
if (Full(board, ROW, COL) == 0)
{
printf("平局\n");
break;
}
if (CheckWin(board, ROW, COL) != ' ')
{
printf("电脑赢\n");
break;
}
printf("电脑走:>");
printf("\n");
ComputerMove(board, ROW, COL);
PrintBoard(board, ROW, COL);
if (Full(board, ROW, COL) == 0)
{
printf("平局\n");
break;
}
if (CheckWin(board, ROW, COL) != ' ')
{
printf("电脑赢\n");
break;
}
}
system("pause");
return 0;
}
阅读全文
0 0
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 【小游戏】三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 小游戏:三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋 小游戏
- C语言小游戏"三子棋"
- 超级小游戏:三子棋
- 三子棋小游戏的实现
- 邮政集团的OA系统无法显示文档
- 各种机器学习的应用场景分别是什么?
- 主键、外键和索引的区别
- 关于inline(内联)
- Oracle RAC数据库环境下临时表空间的设置问题
- 三子棋 小游戏
- 设计模式
- WebClient上传文件到指定URI及在指定URI下载文件(包括图片)
- HashMap源码分析详解
- Visual Studio原生开发的10个调试技巧
- oracle 表空间管理命令
- Python操作分布式流处理系统Kafka
- Part Itemtype解读(3): View
- springcloud架构搭建(一) Eureka服务器搭建及配置