它来啦,它来啦!三子棋小游戏来啦!!!

编程入门 行业动态 更新时间:2024-10-27 04:30:33

它<a href=https://www.elefans.com/category/jswz/34/1767016.html style=来啦,它来啦!三子棋小游戏来啦!!!"/>

它来啦,它来啦!三子棋小游戏来啦!!!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 


目录

前言

一、三子棋游戏简易介绍

二、设计思路

1.模型搭建

2.函数的具体实现

初始化棋盘

打印棋盘

玩家走

电脑走

判定输赢

完整代码

game.h

game.c

test.c

总结

 


前言

提示:这里可以添加本文要记录的大概内容:

休闲时刻,轻松一下!!!今天给大家带来一个简单易上手的小游戏——三子棋。


提示:以下是本篇文章正文内容,下面案例可供参考

一、三子棋游戏简易介绍

      三子棋是一种民间传统小游戏,又叫九宫棋,井字棋,圈圈叉叉等。将正方形对角线连起来,玩家按顺序下棋,每次只能下一枚。最后谁先将自己的三个棋子走成一条线,就算获胜!

二、设计思路

      设计一款游戏最重要的是思路,有了大概思路,我们才能够进行扩展和完善。首先,游戏设置两只玩家和电脑两个角色,玩家为*,电脑为#,一方先三点连成一线即为胜利。

1.模型搭建

      我们设置了一个do…while循环,使游戏可以一直进行下去直到玩家想要退出游戏。switch语句1开始游戏,0选择退出游戏。game()则为游戏的具体实现。

代码如下(示例):

void menus() {printf("**********************\n");printf("******* 1.play *******\n");printf("******* 0.exit *******\n");printf("**********************\n");
}
void game() {printf("三子棋游戏\n");
}
int main() {int input = 0;do {menus();printf("玩家请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("请重新选择\n");break;}} while (input);return 0;
}

2.函数的具体实现

我们最终想要呈现的棋盘如下图所示:

初始化棋盘

       首先,我们要搭建一个二维数组,行和列分别为ROW,COL;然后初始化二维数组,使数组每个元素为’’(空格);这样做是为了方便后续打印棋盘。

void init_board(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {board[i][j] = ' ';}}
}

打印棋盘

void print_board(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {int j = 0;//打印数据for (j = 0; j < col; j++) {printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");//打印---|---|---if (i < row - 1) {for (j = 0; j < col; j++) {printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}

玩家走

       玩家首先输入坐标(x,y),由于部分玩家不清楚计算机是从0开始计数的,所以玩家真正指定的位置其实为board[x-1[y-1]。
       接下来,判断玩家坐标合法性:
1.数组不可越界
2.不可指定已被占用的位置
不符合以上两点要求的都要重新输入。

void player_board(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;while (1) {printf("玩家走\n");printf("请输入坐标:>");scanf("%d %d", &x, &y);//判断坐标合法性if (x >= 1 && x <= row && y >= 1 && y <= col) {//判断坐标是否被占用if (board[x-1][y-1] == ' ') {board[x-1][y-1] = '*';break;}elseprintf("请重新输入:>\n");}elseprintf("请重新输入:>\n");}
}

电脑走

       电脑通过rand()函数随机生成(0-row/col-1之间的数字),所以不用判断数组越界问题,找到空格位置 即可下棋,否则,重新输入。

void computer_board(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("电脑走\n");x = rand() % row;y= rand() % col;if (board[x][y] == ' ') {board[x][y] = '#';}elseprintf("请重新输入:>\n");
}

判定输赢

 1.玩家赢 *2.电脑赢 #3.平局   Q4.继续游戏 C

       双方谁先行,列三点连成一线,或者对角线连成一线,就算谁赢,结束游戏。
如果棋下满仍然未有一方三点一线,则视为平局,游戏结束。
在棋落满之前,继续游戏。

char is_winner(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ')return board[i][0];}for (i = 0; i < col; i++) {if (board[0][i] == board[1][i] && board[0][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[1][1] != ' ')return board[1][1];if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')return board[1][1];for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {if (board[i][j] == ' ');return 'C';}}return 'Q';
}

完整代码

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//定义行列
#define COL 3
#define ROW 3
//初始化棋盘
void init_board(char board[ROW][COL], int row, int col);
//打印棋盘
void print_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_winner(char board[ROW][COL], int row, int col);

game.c

#include"game.h"
void init_board(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {board[i][j] = ' ';}}
}
void print_board(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {int j = 0;//打印数据for (j = 0; j < col; j++) {printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");//打印---|---|---if (i < row - 1) {for (j = 0; j < col; j++) {printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}
void player_board(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;while (1) {printf("玩家走\n");printf("请输入坐标:>");scanf("%d %d", &x, &y);//判断坐标合法性if (x >= 1 && x <= row && y >= 1 && y <= col) {//判断坐标是否被占用if (board[x-1][y-1] == ' ') {board[x-1][y-1] = '*';break;}elseprintf("请重新输入:>\n");}elseprintf("请重新输入:>\n");}
}
void computer_board(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("电脑走\n");x = rand() % row;y= rand() % col;if (board[x][y] == ' ') {board[x][y] = '#';}elseprintf("请重新输入:>\n");
}
char is_winner(char board[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++) {if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ')return board[i][0];}for (i = 0; i < col; i++) {if (board[0][i] == board[1][i] && board[0][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[1][1] != ' ')return board[1][1];if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')return board[1][1];for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {if (board[i][j] == ' ');return 'C';}}return 'Q';
}

test.c

#include "game.h"
void menus() {printf("**********************\n");printf("******* 1.play *******\n");printf("******* 0.exit *******\n");printf("**********************\n");
}
void game() {char board[ROW][COL] = { 0 };init_board(board, ROW, COL);print_board(board, ROW, COL);char ret = 0;while (1) {player_board(board, ROW, COL);ret = is_winner(board, ROW, COL);if (ret != 'C')break;print_board(board, ROW, COL);computer_board(board, ROW, COL);if (ret != 'C')break;print_board(board, ROW, COL);}if (ret == '*')printf("玩家赢\n");else if (ret == '#')printf("电脑赢\n");elseprintf("平局\n");print_board(board, ROW, COL);
}int main() {int input = 0;srand((unsigned int)(time(NULL)));do {menus();printf("玩家请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("请重新选择\n");break;}} while (input);return 0;
}

总结

 谢谢大家!!!祝大家生活愉快!!!!!!

更多推荐

它来啦,它来啦!三子棋小游戏来啦!!!

本文发布于:2023-06-28 00:34:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/919139.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:来啦   小游戏   三子

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!