C语言开篇->关于数组函数的运用[三子棋]小游戏

三子棋的犯错合集->函数数组的那些坑

首先是vs2013上的那些秘密

  • 关于最近使用的vs2013的这件事大概已经平常了,我就说说最近发生的几起重大事件:
  • debug 的问题
    我以前是用的c语言编译器是GCC,那么也就是说这种的debug应该是比较原始的,但是说实话,我觉的一点都不原始,因为,GCC编译后的提示是全面的,包括, 数组访问越界 和指针的问题都会有十分全面的解释,但是VS就不一样了,她的表达方式就有所改变
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define row_max 3
#define col_max 3
char chess_board[row_max][col_max];


void Start_page(){
	printf("--------------------------------\n");
	printf("-------三子棋游戏----------------\n");
	printf("[1]开始游戏\n");
	printf("[2]结束游戏\n");
	printf("请输入你的选择:\n");
	printf("--------------------------------\n");
	printf("--------------------------------\n");
}


int User_write(){
	int flag;
	while(1){
		scanf("%d", &flag);
		if (flag == 1){
			return 1;
		}
		if (flag == 2){
			return 2;
		}
		else{
			printf("输入有误,请重新输入...\n");
			}
		}
}


void Init(){

	for (int row = 0; row < row_max; row++){
		for (int col = 0; col < col_max; col++){
			chess_board[row][col] = ' ';
		}
	}
	srand((unsigned int)time(0)); //time(0) 获取当前的时间戳  从1970年开始到现在时间的秒数     sand()函数的注解    The function srand() is used to seed the random sequence generated by rand(). For any given seed, rand() will generate a specific "random" sequence over and over again  srand 函数的运用就是给rand 函数专用的设置序列的函数
}


void Print(){
	printf("----棋盘-----\n");
	for (int row = 0; row < row_max; row++){
		printf("| %c | %c | %c |\n", chess_board[row][0], chess_board[row][1], chess_board[row][2]);
		printf("-------------\n");
	}
}


void PlayerMove(){
	printf("玩家落子.....\n");
	while (1){
		printf("请输入落子的位置...(row,col)\n");
		int row, col; 
		scanf("%d,%d",&row,&col);
		if (row < 0 || row >= row_max || col < 0 || col >= col_max){
			printf("输入有问题,请重行输入....\n");
			continue;
		}
		if (chess_board[row][col] != ' '){
			printf("该位置已被占用,请重行输入....\n");
			continue;
		}
		chess_board[row][col] = 'X';
		break;
	}
	printf("玩家落子完毕.....\n");
}


void ComputerMove(){

	printf("电脑落子.....\n");
	while (1){
		int row = rand() % 3; // rand函数是能够返回一个在最大值和0之间的一个随机整数
		int col = rand() % 3; // ()中就是传入的最大值,但是只是传入最大值就会是伪随机数
		if (chess_board[row][col] != ' '){
			continue;
		}
		chess_board[row][col] = 'O';
		break;
	}
	printf("电脑落子完毕.....\n");

}


char Checkwiner(){
	for (int row = 0; row < row_max; row++){
		if (chess_board[row][0] == chess_board[row][1] && chess_board[row][0] == chess_board[row][2]){
			return chess_board[row][0];
		}
	}
	for (int col = 0; col < col_max; col++){
		if (chess_board[0][col] == chess_board[1][col] && chess_board[0][col] == chess_board[2][col]){
			return chess_board[0][col];
		}
	}
	if (chess_board[0][0] == chess_board[1][1] && chess_board[1][1] == chess_board[2][2]){
		return chess_board[1][1];
	}	
	if (chess_board[0][2] == chess_board[1][1] && chess_board[1][1] == chess_board[2][0]){
		return chess_board[1][1];
	}
	if (Isfull()){
		return 'q';//和局
	}
	else return ' ';//可以继续下
	
}

int Isfull(){
	for (int row = 0; row < row_max; row++){
		for (int col = 0; col < col_max; col++){
			if (chess_board[col][col] = ' '){
				return 0;
			}
		}
	}
	return 1;
}


void Game() {
	Init();
	char winner = ' ';
		//初始化一个棋盘
	while (1){
		//	1 打印棋盘
		Print();
		//	2 玩家落子
		PlayerMove();

		//	3 判断胜利
		winner = Checkwiner();
		if (winner != ' '){
			break;
		}

		//  4 电脑落子
		ComputerMove();
		//	5 检测胜利
		 winner = Checkwiner();
		if (winner != ' '){
			break;
		}
	}
	Print();
	if (winner == 'X'){
		printf("还行吧,居然把电脑下赢了...\n");
	}
	if (winner == 'O'){
		printf("电脑把你给秒杀了...真的菜...\n");
	}
	if (winner == 'q'){
		printf("和棋,你和电脑五五开....\n");
	}
	else{
		printf("咋回事,好像出错了...\n");

	}
}


int main(void){
	while (1){
		Start_page();
		if (User_write() == 1){
			Game();

		}
		else
		{
			printf("再也不见,不玩算了......\n");
			break;

		}
	}
	system("pause");
	return 0;
}
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190329180404725.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDAwNzcxMw==,size_16,color_FFFFFF,t_70)
  • 比如这里的符号调试,这里的符号调试可以是从本地库里选择

  • 也可以是从微软选择

  • 但是不管是从哪里选择都是对于我们初学者很不友好的

直接上三子棋的代码

不咋会用这个markdawn,这个代码缩进没了
但是肯定能运行的,有问题估计是暂时没发现

在这里插入图片描述
在这里插入图片描述

  • 被电脑草笑了,哈哈…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值