前言:在学习完C语言的数组知识后我们就可以写一些小游戏了。下面让我们来学习一下如何用C语言实现三子棋小游戏。
1.游戏菜单
游戏菜单应该包括玩游戏,退出游戏等功能。做成循环方便操作。话不多说上代码:
void menu()
{
printf("******************************\n");
printf("**********1.玩游戏************\n");
printf("**********0.退出游戏**********\n");
printf("******************************\n");
}
do
{
menu();
printf("请输入:>\n");
scanf("%d",&input);
switch(input)
{
case 1:
game(a,3,3);
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误\n");
break;
}
}while(input);
2.游戏实现
棋盘初始化:
void Iint(char a[ROW][CLO],int row,int clo)
{
for(int i = 0; i < row; i++){
for(int j = 0; j < clo; j++){
a[i][j] = ' ';
}
}
}
打印棋盘:
void print(char a[ROW][CLO],int row,int clo)
{
int i,j,k;
for(i = 0; i < row; i++)
{
for(j = 0; j < clo; j++)
{
printf(" %c ",a[i][j]);
if(j<clo-1){
printf("|");
}
}
printf("\n");
if(i<row-1){
for(k = 0; k < clo; k++){
printf("----");
}
printf("\n");
}
}
}
打印效果:
电脑下棋:
我们用随机数模拟电脑下棋
void computer(char a[ROW][CLO],int row,int clo)
{
while(1)
{
int x = rand()%3;
int y = rand()%3;
if(a[x][y]==' '){
a[x][y] = '#';
break;
}
}
}
判断输赢:
int isfull(char a[ROW][CLO],int row,int clo)
{
for(int i = 0; i < row; i++){
for(int j = 0; j < clo;j++){
if(a[i][j]==' '){
return 0;
}
}
}
return 1;
}//是否棋盘已满
char iswin(char a[ROW][CLO],int row,int clo)
{
int i,j;
for(i = 0; i < row; i++){
if(a[i][0]=='*'&&a[i][1]=='*'&&a[i][2]=='*'){
return '*';
}
}
for(i = 0; i < clo; i++){
if(a[0][i]=='*'&&a[1][i]=='*'&&a[2][i]=='*'){
return '*';
}
}
if((a[0][0]=='#'&&a[1][1]=='#'&&a[2][2]=='#')||(a[0][2]=='#'&&a[1][1]=='#'&&a[2][0]=='#')){
return '#';
}
for(i = 0; i < row; i++){
if(a[i][0]=='#'&&a[i][1]=='#'&&a[i][2]=='#'){
return '#';
}
}
for(i = 0; i < clo; i++){
if(a[0][i]=='#'&&a[1][i]=='#'&&a[2][i]=='#'){
return '#';
}
}
if((a[0][0]=='*'&&a[1][1]=='*'&&a[2][2]=='*')||(a[0][2]=='*'&&a[1][1]=='*'&&a[2][0]=='*')){
return '*';
}
if(isfull(a,3,3)){
return 'q';//平局
}
return 'c';//继续游戏
}
整合:
void game(char a[ROW][CLO],int row,int clo)
{
int x,y;
Iint(a,3,3);
char ret = 0;
while(1)
{
print(a,3,3);
printf("请输入坐标(空格隔开):>\n");
scanf("%d %d",&x,&y);
while(1){
if(a[x-1][y-1]==' '){
a[x-1][y-1] = '*';
break;
}else{
printf("非法输入请重新输入:>\n");
scanf("%d %d",&x,&y);
}
}
print(a,3,3);
ret = iswin(a,3,3);
if(ret!='c'){
break;
}
printf("电脑输入:\n");
computer(a,3,3);
ret = iswin(a,3,3);
if(ret!='c'){
break;
}
}
if(ret=='*'){
printf("玩家赢\n");
}else if(ret=='#'){
printf("电脑赢\n");
}else{
printf("平局\n");
}
}
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define CLO 3
void menu()
{
printf("******************************\n");
printf("**********1.玩游戏************\n");
printf("**********0.退出游戏**********\n");
printf("******************************\n");
}
void Iint(char a[ROW][CLO],int row,int clo)
{
for(int i = 0; i < row; i++){
for(int j = 0; j < clo; j++){
a[i][j] = ' ';
}
}
}
void print(char a[ROW][CLO],int row,int clo)
{
int i,j,k;
for(i = 0; i < row; i++)
{
for(j = 0; j < clo; j++)
{
printf(" %c ",a[i][j]);
if(j<clo-1){
printf("|");
}
}
printf("\n");
if(i<row-1){
for(k = 0; k < clo; k++){
printf("----");
}
printf("\n");
}
}
}
void computer(char a[ROW][CLO],int row,int clo)
{
while(1)
{
int x = rand()%3;
int y = rand()%3;
if(a[x][y]==' '){
a[x][y] = '#';
break;
}
}
}
int isfull(char a[ROW][CLO],int row,int clo)
{
for(int i = 0; i < row; i++){
for(int j = 0; j < clo;j++){
if(a[i][j]==' '){
return 0;
}
}
}
return 1;
}
char iswin(char a[ROW][CLO],int row,int clo)
{
int i,j;
for(i = 0; i < row; i++){
if(a[i][0]=='*'&&a[i][1]=='*'&&a[i][2]=='*'){
return '*';
}
}
for(i = 0; i < clo; i++){
if(a[0][i]=='*'&&a[1][i]=='*'&&a[2][i]=='*'){
return '*';
}
}
if((a[0][0]=='#'&&a[1][1]=='#'&&a[2][2]=='#')||(a[0][2]=='#'&&a[1][1]=='#'&&a[2][0]=='#')){
return '#';
}
for(i = 0; i < row; i++){
if(a[i][0]=='#'&&a[i][1]=='#'&&a[i][2]=='#'){
return '#';
}
}
for(i = 0; i < clo; i++){
if(a[0][i]=='#'&&a[1][i]=='#'&&a[2][i]=='#'){
return '#';
}
}
if((a[0][0]=='*'&&a[1][1]=='*'&&a[2][2]=='*')||(a[0][2]=='*'&&a[1][1]=='*'&&a[2][0]=='*')){
return '*';
}
if(isfull(a,3,3)){
return 'q';
}
return 'c';
}
void game(char a[ROW][CLO],int row,int clo)
{
int x,y;
Iint(a,3,3);
char ret = 0;
while(1)
{
print(a,3,3);
printf("请输入坐标(空格隔开):>\n");
scanf("%d %d",&x,&y);
while(1){
if(a[x-1][y-1]==' '){
a[x-1][y-1] = '*';
break;
}else{
printf("非法输入请重新输入:>\n");
scanf("%d %d",&x,&y);
}
}
print(a,3,3);
ret = iswin(a,3,3);
if(ret!='c'){
break;
}
printf("电脑输入:\n");
computer(a,3,3);
ret = iswin(a,3,3);
if(ret!='c'){
break;
}
}
if(ret=='*'){
printf("玩家赢\n");
}else if(ret=='#'){
printf("电脑赢\n");
}else{
printf("平局\n");
}
}
int main()
{
int input = 0;
char a[3][3];
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入:>\n");
scanf("%d",&input);
switch(input)
{
case 1:
game(a,3,3);
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误\n");
break;
}
}while(input);
return 0;
}
家人们看到这里就点个小小的关注吧 ^ _ ^ 。