三字棋
使用C语言实现
首先我们需要划分模块来实现目标,通过完成一个个模块,将其组装起来,从而实现程序。
〈一〉登入游戏窗口
1,打印登录文字
2,根据用户输入来判断是否登录游戏
〈二〉打印棋盘
〈三〉玩家下棋
〈四〉电脑下棋
〈五〉胜负判断
首先我们实现游戏的登入窗口,我们在main函数中实现
int main() {
printf("******1,play ******\n");
printf("******0,exit ******\n");
return 0;
}
写到这里,我们还需要根据玩家的选择来实现登入,登出游戏。所以主函数内我们需要声明一个变量来接收用户的输入值。
int main() {
printf("******1,play ******\n");
printf("******0,exit ******\n");
int a;
scanf_s("%d",&a);//玩家输入值
return 0;
}
完成用户输入之后,现在需要电脑根据用户输入值来判断登入,登出。我们自定义一个函数Computertry来实现。
void Computertry(int a) {
while (1) {
if (a == 1) {
printf("欢迎来到三字棋游戏\n"); break;
}
else if (a == 0) {
printf("已退出游戏\n"); break;
}
else {
printf("输入有误,请重新输入\n");
}
}
}
这里实现了各大游戏最为基础的界面,现在我们来实现打印棋盘,同样使用自定义函数print来实现,但在完成自定义函数之前,我们需要创建并初始化棋盘,三字棋的棋盘说白了就是一个3×3的二维数组,所以我们需要创建一个二维数组并初始化它。
#include<stdio.h>
#include"标头.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
printf("******1,play ******\n");
printf("******0,exit ******\n");
int a;
scanf_s("%d",&a);//玩家输入值
Computertry(a);//程序判断是否登入游戏
char table[3][3];//二维数组,棋盘
for (int i = 0; i < 3; i++){//初始化棋盘,将空格符录入
for (int j = 0; j < 3; j++) {
table[i][j] = ' ';
}
}
return 0;
}
ok,这里我们完成了二维数组棋盘的创建并且初始化它。现在开始完成打印函数print
void print(char table[3][3]) {
for (int i = 0; i < 3; i++) {//外层循环,控制行
printf("\n-------------\n");
printf("| %c | %c | %c |", table[i][0],table[i][1],table[i][2]);//注意%c前后有一个空格符
}printf("\n-------------\n");
}
这里的打印棋盘的函数已经完成了,接下来就是玩家下棋和电脑下棋了
关于玩家下棋,由scanf函数从缓冲区录入数据,并且是两个数字,由空格符隔开,我们自定义函数Player来实现这个功能。
void drr(char table[3][3]){
int x, y;
scanf_s("%d%d", &x, &y);
if (table[x-1][y-1]==' ')
{
table[x-1][y-1] = '*';
}
else
{
printf("输入有误\n");
}
}
写完玩家下棋之后,我们来写电脑下棋,电脑下棋的规律是完全随机的,我们使用srand函数来实现,在我们使用srand函数之前不要忘记引头文件,srand函数的头文件是#include <time.h>
#include<stdio.h>
#include"标头.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
printf("******1,play ******\n");
printf("******0,exit ******\n");
int a;
scanf_s("%d",&a);//玩家输入值
Computertry(a);//程序判断是否登入游戏
char table[3][3];//二维数组,棋盘
for (int i = 0; i < 3; i++){//初始化棋盘,将空格符录入
for (int j = 0; j < 3; j++) {
table[i][j] = ' ';
}
}
int x,y;
srand((unsigned)time(NULL));
return 0;
}
我们在主文件内部设置时间种子,在自定义函数Computrmove函数内实现电脑下棋,下面我们来实现Computer函数。
void computer(char table[3][3]) {
int w = 0;
while (w!=1)
{
int x= rand() % 3;
int y = rand() % 3;
if (table[x-1][y-1]==' ')
{
table[x-1][y-1] ='x';
w++;
}
}
}
现在我们完成了程序的大部分工程了,现在我们来实现最为核心的胜负判断。
int dis( char table[3][3]) {
//行判断
for (int i = 0; i < 3; i++) {
if (table[i][0] == table[i][1] && table[i][1] == table[i][2] && table[i][0] != ' ') {
printf("胜利!");
return 0;
break;
}
}
//列判断
for (int i = 0; i < 3; i++) {
if (table[0][i] == table[1][i] && table[2][i] == table[1][i] && table[0][i] != ' ') {
printf("胜利");
return 0;
break;
}
}
//斜行判断
if (table[0][0] == table[1][1] && table[2][2] == table[1][1] && table[0][0] != ' ') {
printf("胜利");
return 0;
}
if (table[0][2] == table[1][1] && table[2][0] == table[1][1] && table[0][2] != ' ') {
printf("胜利");
return 0;
}
}
现在完成了所有模块,我们现在只需要将模块组合在一起就可以了。
#include<stdio.h>
#include"标头.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
printf("******1,play ******\n");
printf("******0,exit ******\n");
int a;
scanf_s("%d",&a);//玩家输入值
Computertry(a);//程序判断是否登入游戏
char table[3][3];//二维数组,棋盘
for (int i = 0; i < 3; i++){//初始化棋盘,将空格符录入
for (int j = 0; j < 3; j++) {
table[i][j] = ' ';
}
}print(table);
srand((unsigned)time(NULL));
while (true)
{
drr(table);
print(table);
dis(table);
if (dis(table)==0)
{
break;
}
system("cls");
computer(table);
print(table);
dis(table);
if (dis(table) == 0)
{
break;
}
}
return 0;
}
文章改过,可能有点错误,希望各位大佬指正。谢谢