三字棋实现

文章详细介绍了如何使用C语言编程实现三字棋游戏,包括游戏登录、棋盘打印、玩家和电脑下棋的逻辑以及胜负判断。通过模块化设计,分别编写了不同功能的函数,如用户登录判断、棋盘打印、玩家和电脑的移动以及胜利条件检查。
摘要由CSDN通过智能技术生成

三字棋
    使用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;
}

文章改过,可能有点错误,希望各位大佬指正。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值