首页 > 编程语言 >C语言无脑小游戏三子棋程序

C语言无脑小游戏三子棋程序

时间:2024-08-15 18:25:43浏览次数:13  
标签:无脑 int col C语言 小游戏 board printf COL ROW

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#define ROW 3
#define COL 3

void menu();//菜单函数声明
void game();//游戏函数声明
void Init_board(char board[ROW][COL], int row, int col);//棋盘初始化函数声明
void Display_board(char board[ROW][COL], int row, int col);//棋盘展示函数声明
void player_board(char board[ROW][COL], int row, int col);//玩家下棋函数声明
void computer_board(char board[ROW][COL],int row,int col);//电脑下棋函数声明
char is_end(char board[ROW][COL], int row, int col);//判断是否结束函数声明
void is_win(char flag);//判断谁获胜函数声明


int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:->");
		scanf("%d", &input);
		system("cls");
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("已退出!\n");
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}


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

//游戏函数
void game()
{
	char board[ROW][COL] = { 0 };
	Init_board(board, ROW, COL);//棋盘初始化
	Display_board(board, ROW, COL);//棋盘展示
	while (1)
	{
		player_board(board, ROW, COL);//玩家下棋
		Display_board(board, ROW, COL);//棋盘展示
		printf("\n");
		if (is_end(board, ROW, COL) != 'c')
		{
			is_win(is_end(board, ROW, COL));
			break;
		}
		computer_board(board, ROW, COL);//电脑下棋
		Display_board(board, ROW, COL);//棋盘展示
		printf("\n");
		if (is_end(board, ROW, COL) != 'c')
		{
			is_win(is_end(board, ROW, COL));
			break;
		}
	}
}

void Init_board(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++)
		{
			board[i][j] = ' ';
		}
	}
}

void Display_board(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (j < col - 1)
				printf(" %c |", board[i][j]);
			else
				printf(" %c \n", board[i][j]);
		}
		if (i < row-1 )
		{
			for (int j = 0; j < col; j++)
			{
				if (j < col - 1)
					printf("___|");
				else
					printf("___\n");
			}
		}
		else
		{
			for (int j = 0; j < col; j++)
			{
				if (j < col - 1)
					printf("   |");
				else
					printf("   \n");
			}
		}
	}
}

void player_board(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	while (1)
	{
		int i = 0;
		int j = 0;
		printf("请输入下棋位置->");
		scanf("%d %d", &i, &j);
		if (i <= row && i >= 1 && j <= col && j >= 1)
		{
			if (board[i-1][j-1] == ' ')
			{
				board[i-1][j-1] = '*';
				break;
			}
			else
			{
				printf("坐标已有棋,清重新输入!\n");
			}
		}
		else
		{
			printf("坐标非法,清重新输入!\n");
		}
	}
}

void computer_board(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	while (1)
	{
		i = rand() % 3;
		j = rand() % 3;
		if (board[i][j] ==' ')
		{
			board[i][j] = '#';
			break;
		}
		else
			continue;
	}
}

//判断是否结束
char is_end(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 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[2][0] == board[1][1] == board[0][2] && board[2][0] != ' ')
		return board[2][0];
	//未结束
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				return 'c';
		}
	}
	//平局
	return '-';
}

//判断谁获胜
void is_win(char flag)
{
	if (flag == '*')
	{
		printf("玩家获胜!\n");
		system("pause");
		system("cls");
	}
	else if (flag == '#')
	{
		printf("电脑获胜!\n");
		system("pause");
		system("cls");
	}
	else if (flag == '-')
	{
		printf("平局!\n");
		system("pause");
		system("cls");
	}
}












标签:无脑,int,col,C语言,小游戏,board,printf,COL,ROW
From: https://blog.csdn.net/A_Lv123/article/details/141229019

相关文章

  • C语言最后一讲——预处理超详解
    文章目录1.预定义符号2.`#define`定义常量3.`#define`定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1#运算符7.2##运算符8.命名约定9.`#undef`10.命令行定义11.条件编译12.头文件的包含12.1头文件被包含的方式:12.1.1本地文......
  • C语言中的操作符:深入解析与应用
    引言C语言提供了丰富的操作符,用于执行算术运算、逻辑判断、位操作等。这些操作符是编程语言中的基础构件,它们使得程序能够进行复杂的数据处理和逻辑控制。本文将详细介绍C语言中的各种操作符,包括它们的类型、用法和一些实际应用示例。操作符的分类算术操作符算术操作符用于......
  • C语言内存管理,分配、使用、释放以及安全性
    在C++中,内存分配是通过几种不同的方式来管理的。这包括自动存储、静态存储和动态存储。下面分别解释这些存储类别以及如何使用它们进行内存分配。#1,自动存储(AutomaticStorage)这是最常用的存储类型,当一个变量在函数内被声明时,它会自动获得存储空间,并且在函数结束时自动释放。例......
  • C语言指针详解-上
    C语言指针详解-上前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符`&`和解引用符`*``&`运算符用于**获取变量的地址**`*`运算符用于访问指针指向的值2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指......
  • 译 如何实现一个哈希表(C语言)
    原文:https://benhoyt.com/writings/hash-table-in-c/概要:一个关于如何用C语言实现一个简单的哈希表数据结构的说明。我会简要演示线性与二分搜索,然后设计实现一个哈希表。我的目标是证明哈希表内部并不可怕,相反——在一定的约束内——是足够简单到可以从头实现的。标签:线性搜索......
  • C语言结构体内存对齐
    结构体或许小伙伴们都知道,或许也能够做到熟悉的去运用结构体,但你们有没有想过:整型数组存放的数据都是整型,字符数组存放的数据都是字符,它们类型相同,所以也都能够做到在内存中紧密的存储,而结构体中存放的数据各种各样,它们的存储是否能做到在内存中紧密排列呢?又或者说,结构体的内存......
  • QT翻金币小游戏
    目录QT翻金币小游戏效果展示图片视频实现代码main.cpp mymainwindow.hmymainwindow.cpp startscene.hstartscene.cppselectscene.cppplayscene.hplayscene.cpp mypushbutton.h mypushbutton.cppdataconfig.hdataconfig.cppQT翻金币小游戏效果展示图......
  • 【C语言】sizeof 和 strlen
    sizeof和strlen的对比sizeof在学习操作符的时候,我们学习了sizeof,sizeof计算变量所占内存内存空间大小的,单位是字节。如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据。比如:#include......
  • 汉诺塔小游戏
    1publicclasshanoitower{2publicstaticvoidmain(String[]args){34Towertower=newTower();5tower.move(6,'A','B','C');678}9}1011classTower{12//方法13//num表示移......
  • C语言发展史
    在线书籍:54笨鸟1.C语言发展史任何一种新事物的出现都不是来自于偶然,而是时代所驱使的必然结果。1.1C语言有多伟大如果你问我:C语言有多伟大。那么,我可能会想一下,说:多伟大我不知道,但是我知道很伟大。这里,我想说一句可能有点片面的话,就是:如今这世界上,凡是带电的地方,可能......