目录
扫雷
游戏演示:
主要功能:
实现方式:.通过二维数组,模拟行和列存放地雷;
主函数代码:1.打印菜单;完成对应输入的动作;
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu() {
printf("********************************\n");
printf("********* 1.play ************\n");
printf("********************************\n");
printf("********* 0.exit ************\n");
printf("********************************\n");
}
void game() {
//存储数据的二维数组
char mine[ROWS][COLS] = { '0' };
char show[ROWS][COLS] = { '0' };
//初始化数据
InitBoard(mine, ROWS, COLS, '0');
InitBoard(show, ROWS, COLS, '*');
//设置地雷 1 地雷
setMine(mine, ROW, COL);
//打印
displayBoard(mine, ROW, COL);
displayBoard(show, ROW, COL);
//玩家输入
findMine(mine,show,ROW,COL);
}
int main()
{
int num = 0;
srand((unsigned int)(time(NULL)));
while (1)
{
menu();
printf("请选择游戏:>");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("结束游戏!");
break;
default:
printf("输入有误,请重新输入!");
}
}
return 0;
}
函数文件:包含初始,设置地雷,地雷的打印,判断坐标
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
//初始化数据
void InitBoard(char board[ROWS][COLS], int row, int col, char set)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = set;
}
}
}
//设置地雷
void setMine(char mine[ROWS][COLS], int row, int col)
{
int count = EASYCOUNT;
while(count)
{
int x = rand() % row + 1;
int y = rand() % col + 1;
if (mine[x][y] == '0')
{
mine[x][y] = '1';
count--;
}
}
}
//打印
void displayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
printf("---------------------扫雷---------------------------\n");
//列数
for (i = 0; i <= col;i++) {
printf("%d ", i);
}
printf("\n");
//行号 和 内容区
for (i = 1; i <= row; i++)
{
printf("%d ",i);
for (j = 1; j <= col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("---------------------扫雷---------------------------\n");
}
void findMine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col)
{
int win = 0;
int x = 0;
int y = 0;
while (win<row*col-EASYCOUNT)
{
printf("请输入坐标:>");
scanf("%d %d", &x, &y);
//判断坐标的合法性
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '0')
{
//计算周围雷的数量
int num = getMineCount(mine, x, y);
//显示排查信息
show[x][y] = num + '0';
//打印地区
displayBoard(show, row, col);
win++;
}
else
{
printf("很遗憾,排雷失败!\n");
displayBoard(mine, row, col);
break;
}
}
else
printf("输入违法坐标!请重新输入\n");
}
if (win == row * col - EASYCOUNT)
{
printf("排雷成功1\n");
displayBoard(mine, row, col);
}
}
static int getMineCount(char arr[ROWS][COLS], int x, int y)
{
return (arr[x - 1][y] + arr[x + 1][y] +
arr[x][y + 1] + arr[x][y - 1] +
arr[x - 1][y + 1] + arr[x + 1][y + 1] +
arr[x - 1][y - 1] + arr[x + 1][y - 1]
-8 * '0');
//上面每一个坐标都是字符 0 => ascll 48;
//所以要减去8*‘0’ =》 8*48
//这样子剩下的只会是 ‘1’=》 49被减去48 等于 1
//1的累加才会是想要的结果
//这个地放要结合ascll码值 来进行计算; '0':48 '1':49
}
函数头文件:默认参数设置,以及函数声明
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//地雷范围
#define ROW 9
#define COL 9
//规避越界
#define ROWS ROW+2
#define COLS COL+2
//地雷个数
#define EASYCOUNT 80
//初始化数据
void InitBoard(char mine[ROWS][COLS], int row, int col, char set);
//设置地雷
void setMine(char mine[ROWS][COLS], int row, int col);
//打印
void displayBoard(char mine[ROWS][COLS], int row, int col);
//
void findMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
三子棋
游戏演示:
主函数内容:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "game.h"
void menu() {
printf("******************************************\n");
printf("********** 1. play *****************\n");
printf("******************************************\n");
printf("********** 0. exit *****************\n");
printf("******************************************\n");
}
void game() {
//存放下棋的数据
//ROW COL:3 在头部文件中设置,一改全改
char board[ROW][COL];
//初始化,全部为空格
InitBoard(board, ROW, COL);
//打印
printBoard(board, ROW, COL);
char ret = ' ';
while (1) {
//玩家下
playerMove(board, ROW, COL);
printBoard(board, ROW, COL);
ret = is_win(board, ROW, COL);
printf("%c", ret);
//电脑下
aiMove(board, ROW, COL);
printBoard(board, ROW, COL);
ret = is_win(board, ROW, COL);
printf("%c", ret);
if (ret != 'C')
break;
}
//判断是否结束
//返回 玩家*
//返回 电脑#
//返回 平局Q
//返回 继续C
switch (ret)
{
case '*':
printf("玩家赢;\n");
break;
case '#':
printf("电脑赢;\n");
break;
case 'Q':
printf("平局;\n");
break;
}
}
int main() {
/*
*/
int num = 0;
//随机数初始化
srand((unsigned int)time(NULL));
do {
menu();
printf("请选择:>");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("游戏结束!");
break;
default:
printf("输入错误,请重新输入!");
break;
}
} while (num);
return 0;
}
函数文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h" //会先在当前路劲下找
//将数组中的所有数据设置为空格
void InitBoard(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] = ' ';
}
}
}
//打印棋盘
//一行打印 0 | 0 | 0
//___|___|___
//打印三行
void printBoard(char board[ROW][COL], int row, int col) {
int i = 0;
for (i = 0; i < row; i++)
{
// 0 | 0 | 0
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)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
}
//玩家下
void playerMove(char board[ROW][COL], int row, int col)
{
int num1 = 0;
int num2 = 0;
while (1)
{
printf("请输入棋子位置:>");
scanf("%d %d", &num1, &num2);
//坐标和法性
if (num1 <= row || num1 >= 1 || num2 <= col || num2 >= 1)
{
if (board[num1 - 1][num2 - 1] == ' ')
{
board[num1 - 1][num2 - 1] = '*';
break;
}
else
printf("输入的坐标被占用,请从新输入:\n");
}
else
{
printf("输入坐标有误!\n");
}
}
}
void aiMove(char board[ROW][COL], int row, int col)
{
printf("电脑走:\n");
while (1) {
//随机数 范围设置
int x = rand() % row;
int y = rand() % col;
//printf("%d %d", x, y);
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
//判断
int is_win(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][1] == board[i][2] && board[i][2] != ' ')
return board[i][0];
//列
if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != ' ')
return board[0][i];
//斜
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ')
return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
return board[0][2];
//下满了,平局
if (is_full(board,row,col) == 1)
{
return 'Q';
}
//继续
return 'C';
}
}
static int is_full(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++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
头文件:
#define _CRT_SECURE_NO_WARNINGS 1
//头文件包含
#include <stdio.h> //会先在系统路径下载
#include <stdlib.h>
#include <time.h>
//定义数据,
#define ROW 3
#define COL 3
//
void menu();
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印
void printBoard(char board[ROW][COL], int row, int col);
//玩家下
void playerMove(char board[ROW][COL], int row, int col);
//电脑下
void aiMove(char board[ROW][COL], int row, int col);
//判断
int is_win(char board[ROW][COL], int row, int col);
如何判断三子棋是否满足条件;
坐标的范围控制