[项目]——C语言实现三子棋

代码分为三部分:test->程序测试模块;game->为游戏业务逻辑部分

  • 棋盘是以二维数组为载体来实现的,通过数组元素来记录落子信息;
  • 首先要对棋盘初始化,将数组元素置为‘ ’;
  • 打印棋盘 ,查看棋盘结构;
  • 玩家落子:考察坐标合法性;有无已有棋子;
  • 判断胜负:行3列3对角线三个条件可判断胜负,并且返回当前落子符号作为判断玩家赢还是电脑赢的条件;同时,遍历数组寻找有无‘ ’,有则继续对局,否则返回Q表示平局;
  • 电脑落子:采用随机落子,同时判断落子坐标范围与是否所选坐标已有棋子,对坐标进行合法性判断;

在代码中来总结分析这个实现过程:

test.c
#include<stdio.h>
#include"game.h"
#define _CRT_SECURE_NO_WARNINGS

void meau() {
	printf("************************\n");
	printf("******* 1.play *********\n");
	printf("******* 0.exit *********\n");
	printf("************************\n");
	}

void game() {

	char boder[ROW][COL];//定义棋盘
	char ret = "";

	//初始化棋盘
	initial(boder, ROW, COL);
	//打印棋盘
	display(boder, ROW, COL);
	//玩家下棋
	while (1) {
		playMove(boder, ROW, COL);
		display(boder, ROW, COL);
		ret= isWin(boder,ROW,COL);
		if (ret != 'c')
		{
			break;
		}
		pcMove(boder, ROW, COL);	
		display(boder, ROW, COL);
		ret = isWin(boder, ROW, COL);
		if (ret != 'c')
		{
			break;
		}
	}
	if (ret == '*') {
		printf("玩家赢了\n");
	}
	if (ret == '#') {
		printf("电脑赢了\n");
	}
	if (ret == 'Q') {
		printf("平局\n");
	}

}

void main() {
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		meau();
		printf("请选择:-> \n");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			printf("开启游戏\n\n");
			game();
			break;
		case 0:
			printf("退出游戏\n\n");
			break;
		default:
			printf("请重新输入\n\n");
			break;
		}
	} while (input);
}
game.h模块
#pragma once
#include <stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3


//初始化
void initial(char boder[ROW][COL], int row, int col);

//打印棋盘
void display(char boder[ROW][COL], int row, int col);

//玩家下棋
void playMove(char boder[ROW][COL], int row, int col);

//电脑下棋
void pcMove(char boder[ROW][COL], int row, int col);

//判断输赢
char isWin(char boder[ROW][COL], int row, int col);

game.c 模块
#include"game.h"
#include<stdio.h>

void initial(char boder[ROW][COL], int row, int col) {
	int i = 0;
	int j = 0;

	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < COL; j++)
		{

			boder[i][j] =' ';

		}
	}
}


void display(char boder[ROW][COL], int row, int col) {
	int i = 0;
	int j = 0;
	for ( i = 0; i < row; i++)
	{
		for (j = 0; j < row; j++)
		{

			printf(" %c ", boder[i][j]);
			if (j<col-1)
			{
				printf("|");
			}
			
		}
		printf("\n");
		for (j = 0; j < row; j++)
		{
			if (i < row - 1)
			{
				printf("---");

				if (j < col - 1)
				{
					printf("|");
				}
			}
		}
		printf("\n");
	}
}

void playMove(char boder[ROW][COL], int row, int col) {
	printf("玩家走:->\n");
	printf("输入坐标 X Y\n");
	int x = 0;
	int y = 0;
	while (1) {
		scanf("%d%d", &x, &y);
		//判断坐标的合法性
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL) {
			//判断落子位置有无被占用
			if (boder[x-1][y-1]==' ')
			{
				boder[x-1][y-1] = '*';
				break;
			}
			else {
				printf("此处已有棋子,请重新选择\n");
			}
		}
		else {
			printf("坐标越界,请重新输入\n");
		}
		
	}
	
}

void pcMove(char boder[ROW][COL], int row, int col) {
	printf("电脑走;->\n");
	
	
	while (1)
	{
		int a = rand()%row;
		int b = rand()%col;
		if (boder[a][b] == ' ') {
			boder[a][b] = '#';
			break;
		}		
	}
	printf("Computer ... Done\n");
	
}


char isWin(char boder[ROW][COL], int row, int col) {
	// 判断输赢
		//行 获胜条件
	for (int i = 0; i < row; i++)
	{
		if (boder[i][0] == boder[i][1] && boder[i][1] == boder[i][2]&& boder[i][0]!= ' ') {
			return boder[i][0];
		}
	}
		//列 获胜条件
	for (int i = 0; i < col; i++)
	{
		if (boder[0][i] == boder[1][i] && boder[1][i] == boder[2][i] && boder[0][i] != ' ') {
			return boder[0][i];
		}
	}
		//对角线获胜条件
	if (boder[0][0]== boder[1][1] && boder[1][1] == boder[2][2] && boder[1][1]!=' ')
	{
		return boder[1][1];
	}
	if (boder[0][2] == boder[1][1] && boder[1][1] == boder[2][0] && boder[1][1] != ' ')
	{
		return boder[1][1];
	}
	//判断平局

	//判断是否继续
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++)
		{
			if (boder[i][j] == ' ') {
				return 'c';
			}
		}
	}
	//循环结束 能进行到此步 说明棋盘满了,返回平局标志Q;
	return "Q";
}

结果展示:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值