目录
前言
大家好呀,欢迎来到我滴博客,就如同标题那样,我带大家实现的就是“三子棋” 小游戏,这个游戏很经典,也很有意思(有意思的是我们自己创造出来的人工智障哈哈),这个小游戏的具体功能呢有人机对战,玩家solo以及退出(有初级进度条的实现哟~),500行相信大家跟着这篇博客成功地实现了你自己的三子棋以后,你对循环,函数以及文件后缀.h呀.c以及游戏的先后出手顺序也会有一个新的认识,那么现在跟我一起去创造你的第一个人工智障吧!!!
希望大家敲到足够的代码后也能像我一样找到女朋友 ,嘿嘿今个刚好是我家小姑娘生日哦~
动力源泉啊兄弟们!!!
一、游戏想要有意思,函数不可少,整活的函数
srand((unsigned int)time(NULL))(引入头文件#include<stdlib.h>)一般和rand()(引入头文件#include<time.h)一同使用用来产生随机数
Sleep(int x)(头文件#include<windows.h)可以使打印有时间间隔,这里我用来做进度条
system("cls")(头文件#include<stdlib.h>)用来清理屏幕。
先给大家看看需要自己写的函数,接口函数的功能都有备注(一般定义在.h文件里)
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<windows.h>
#define ROW 3//行
#define COL 3//列,不用加;
void test();//测试运行
void menu();//菜单栏
void game();//游戏逻辑
//先声明
void player_move1(char board[ROW][COL], int row, int col);//玩家b下棋
void init_board(char board[ROW][COL], int row, int col);//初始化棋盘
void print_board(char board[ROW][COL], int row, int col);//打印棋盘
void player_move(char board[ROW][COL], int row, int col);//玩家a下棋
void computer_move(char board[ROW][COL], int row, int col);//电脑下棋
char in_win(char board[ROW][COL], int row, int col);//判断输赢
二、三子棋的游戏界面
上边就是界面的初步实现,界面越简洁,说明越容易实现,相信我,你也可以的。
三、三子棋的功能步骤分析
1.菜单
展示一个页面,提示用户,根据数字选择游戏方式,主要是为了美观!!!
一般界面的实现用的是void menu()函数
void menu()//菜单
{
printf("***********************\n");
printf("***********************\n");
printf("******0 退出游戏******\n");
printf("******1. 人机大战******\n");
printf("******2. 人人对决******\n");
printf("***********************\n");
printf("***********************\n");
}
2.三子棋实现的总体框架
根据菜单提示,输入数字,回车,进入游戏。
而这个数字的控制自然需要借助switch语句,而游戏肯定不是想只玩一局,这时候do--while()语句就派上了用场,一般来说,菜单以及测试实现游戏功能所需要的函数都放在void taxt()函数中
输入0退出游戏,1和2分别是人机大战和人人对决其他的则会提醒你重新输入。
然后是不是需要一些条件判断谁赢谁输以及继续游戏还是平局,下面我来提前规定一下
我们用游戏过程中产生的返回值来判断是否要继续,定义char ret来接收返回值
ret==C,游戏继续
ret==Q,游戏平局
ret==‘*’,玩家胜利
ret==‘#’,电脑胜利
void text()
{
srand((unsigned int)time(NULL));//unsigned inttime最好强制类型转换一下
int input = 0;
char arr[50];
strcpy(arr, "-------------------------------------------------");
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1: {
printf("三子棋\n");
game1();
printf("正在退出,请稍后哦亲~\n");
for (int i = 0; i < 50; i++)
{
printf("%c", arr[i]);
Sleep(100);
}
system("cls");
break;
}
case 2: {
printf("三子棋\n");
game2();
printf("正在退出,请稍后哦亲~\n");
for (int i = 0; i < 50; i++)
{
printf("%c", arr[i]);
Sleep(100);
}
system("cls");
break;
}
case 0:
{
printf("正在退出,请稍后哦亲~\n");
for (int i = 0; i < 50; i++)
{
printf("%c", arr[i]);
Sleep(100);
}
system("cls");
break;
}
default:
{
printf("选择错误,请重新选择\n");
}
}
} while (input);
}
我们输入的便是input的数值,当输入0的时候input==0则switch可以退出,while(input)里的条件也不成立,则可以退出游戏。
注意看在(正在退出,请稍后哦亲~)的那里我加了for循环,Sleep()