头文件:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//游戏开始菜单
void menu(void);
//游戏主体函数
void game(void);
//第一关
int game_one(void);
//第二关
int game_two(void);
//第三关
int game_three(void);
//第四关
int game_four(void);
//第五关
int game_five(void);
//输出游戏的函数
void put_game(char** game, int length, int width);
//用户输入界面菜单
void menu_palyer(void);
//玩家输入wasd用来决定进行上下移动
int player_input(char** game, int length, int width, int* x, int* y);
测试文件:
#include"game.h"
int main() {
int flag = 0;
do {
system("cls");
menu();
scanf("%d", &flag);
if (flag > 1 || flag < 0) {
printf("输入错误,请重新输入:>");
}
else if (flag==1) {
game();
system("cls");
}
else if (flag == 0) {
printf("Game over!!!\n");
break;
}
} while (flag);
return 0;
}
游戏函数主体文件:
#include"game.h"
void game(void) {
int flag = 1;
do {
if (flag == 1) {
printf("第一关\n");
Sleep(1000);
system("cls");
flag = game_one();
}
if (flag == 2) {
printf("第二关\n");
Sleep(1000);
system("cls");
flag = game_two();
}
if (flag == 3) {
printf("第三关\n");
Sleep(1000);
system("cls");
flag = game_three();
}
if (flag == 4) {
printf("第四关\n");
Sleep(1000);
system("cls");
flag = game_four();
}
if (flag == 5) {
printf("第五关\n");
Sleep(1000);
system("cls");
flag = game_five();
}
if (flag == 6) {
printf("恭喜您已经全部通关!!!");
Sleep(1000);
Sleep(1000);
Sleep(1000);
goto out_game;
}
} while (flag != 0);
out_game:
printf("游戏结束\n");
}
//第五关
int game_five(void) {
int is_win = 5;
int length = 5;
int width = 5;
char** game = (char**)malloc(width * sizeof(char*));
for (int i = 0;i < length;i++) {
game[i] = (char*)malloc(length * sizeof(char));
}
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
game[i][j] = '\0';
}
}
for (int i = 0;i < width;i++) {
game[i][0] = '#';
game[i][length - 1] = '#';
}
for (int j = 0;j < length;j++) {
game[0][j] = '#';
game[length - 1][j] = '#';
}
game[1][2] = '#';
int x = 3;
int y = 3;
game[x][y] = '&';
game[2][2] = '0';
game[2][1] = '0';
game[1][1] = 'x';
game[1][3] = 'x';
int is_out = 1;
while (is_out == 1) {
system("cls");
put_game(game, length, width);
is_out = player_input(game, length, width, &x, &y);
if (is_out == 0) {
goto out;
}
if (game[1][1] == '0'&&game[1][3] == '0') {
is_win = 6;
system("cls");
put_game(game, length, width);
goto out;
}
}
out:
for (int i = 0;i < width;i++) {
free(game[i]);
}
free(game);
return is_win;
}
//第四关
int game_four(void) {
int is_win = 4;
int length = 7;
int width = 7;
char** game = (char**)malloc(width * sizeof(char*));
for (int i = 0;i < length;i++) {
game[i] = (char*)malloc(length * sizeof(char));
}
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
game[i][j] = '\0';
}
}
for (int i = 0;i < width;i++) {
game[i][0] = '#';
game[i][length - 1] = '#';
}
for (int j = 0;j < length;j++) {
game[0][j] = '#';
game[length - 1][j] = '#';
}
for (int i = 0;i < width;i++) {
game[i][1] = '#';
game[i][length - 2] = '#';
}
int x = 5;
int y = 3;
game[x][y] = '&';
game[4][3] = '0';
game[3][3] = '0';
game[2][3] = '0';
game[1][3] = '0';
game[4][2] = 'x';
game[3][2] = 'x';
game[2][2] = 'x';
game[1][2] = 'x';
int is_out = 1;
while (is_out == 1) {
system("cls");
put_game(game, length, width);
is_out = player_input(game, length, width, &x, &y);
if (is_out == 0) {
goto out;
}
if (game[4][2] == '0'&&game[3][2] == '0'&&game[2][2] == '0'&&game[1][2] == '0') {
is_win = 5;
system("cls");
put_game(game, length, width);
goto out;
}
}
out:
for (int i = 0;i < width;i++) {
free(game[i]);
}
free(game);
return is_win;
}
//第三关
int game_three(void) {
int is_win = 3;
int length = 8;
int width = 8;
char** game = (char**)malloc(width * sizeof(char*));
for (int i = 0;i < length;i++) {
game[i] = (char*)malloc(length * sizeof(char));
}
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
game[i][j] = '\0';
}
}
for (int i = 0;i < width;i++) {
game[i][0] = '#';
game[i][length - 1] = '#';
}
for (int j = 0;j < length;j++) {
game[0][j] = '#';
game[length - 1][j] = '#';
}
for (int i = 0;i < width;i++) {
game[i][1] = '#';
game[i][2] = '#';
game[i][length - 2] = '#';
game[i][length - 3] = '#';
}
game[width - 2][4] = '#';
game[width - 3][4] = '#';
game[width - 4][4] = '#';
int x = 5;
int y = 3;
game[x][y] = '&';
game[4][3] = '0';
game[6][3] = 'x';
int is_out = 1;
while (is_out == 1) {
system("cls");
put_game(game, length, width);
is_out = player_input(game, length, width, &x, &y);
if (is_out == 0) {
goto out_three;
}
if (game[6][3] == '0') {
is_win = 4;
system("cls");
put_game(game, length, width);
goto out_three;
}
}
out_three:
for (int i = 0;i < width;i++) {
free(game[i]);
}
free(game);
return is_win;
}
//第二关
int game_two(void) {
int is_win = 2;
int length = 8;
int width = 8;
char** game = (char**)malloc(width * sizeof(char*));
for (int i = 0;i < length;i++) {
game[i] = (char*)malloc(length * sizeof(char));
}
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
game[i][j] = '\0';
}
}
for (int i = 0;i < width;i++) {
game[i][0] = '#';
game[i][length - 1] = '#';
}
for (int j = 0;j < length;j++) {
game[0][j] = '#';
game[length - 1][j] = '#';
}
for (int i = 0;i < 4;i++) {
for (int j = 0;j < 3;j++) {
game[i][j] = '#';
}
}
for (int i = 0;i < 3;i++) {
for (int j = length - 4;j < length;j++) {
game[i][j] = '#';
}
}
for (int i = width - 3;i < width;i++) {
for (int j = 0;j < 5;j++) {
game[i][j] = '#';
}
}
for (int i = width - 4;i < width;i++) {
for (int j = length - 3;j < length;j++) {
game[i][j] = '#';
}
}
int x = 4;
int y = 3;
game[4][2] = '0';
game[3][3] = '0';
game[3][4] = '0';
game[5][4] = '0';
game[4][1] = 'x';
game[1][3] = 'x';
game[6][4] = 'x';
game[3][6] = 'x';
game[x][y] = '&';
int is_out = 1;
while (is_out == 1) {
system("cls");
put_game(game, length, width);
is_out = player_input(game, length, width, &x, &y);
if (is_out == 0) {
goto out_two;
}
if (game[4][1] == '0'&& game[1][3] == '0'&& game[6][4] == '0'&& game[3][6] == '0') {
is_win = 3;
system("cls");
put_game(game, length, width);
goto out_two;
}
}
out_two:
for (int i = 0;i < width;i++) {
free(game[i]);
}
free(game);
return is_win;
}
//第一关
int game_one(void) {
int is_win = 1;
int length = 5;
int width = 5;
char** game = (char**)malloc(width * sizeof(char*));
for (int i = 0;i < length;i++) {
game[i] = (char*)malloc(length * sizeof(char));
}
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
game[i][j] = '\0';
}
}
for (int i = 0;i < width;i++) {
game[i][0] = '#';
game[i][length - 1] = '#';
}
for (int j = 0;j < length;j++) {
game[0][j] = '#';
game[length - 1][j] = '#';
}
game[1][1] = '#';
game[1][length - 2] = '#';
game[2][1] = '#';
int x = 3;
int y = 3;
game[2][2] = '0';
game[3][2] = '0';
game[1][2] = 'x';
game[3][1] = 'x';
game[x][y] = '&';
int is_out = 1;
while (is_out==1) {
system("cls");
put_game(game, length, width);
is_out = player_input(game, length, width, &x, &y);
if (is_out == 0) {
goto out_one;
}
if (game[1][2] == '0' && game[3][1] == '0') {
is_win = 2;
system("cls");
put_game(game, length, width);
goto out_one;
}
}
out_one:
for (int i = 0;i < width;i++) {
free(game[i]);
}
free(game);
return is_win;
}
//玩家输入wasd用来决定进行上下移动
int player_input(char** game, int length, int width,int*x,int*y) {
char flag = 0;
menu_palyer();
scanf("%c", &flag);
if (flag == 'c') {
return 0;
}
else if(flag=='w') {//向上移动
if (game[*x - 1][*y] == '\0') {
game[*x - 1][*y] = '&';
game[*x][*y] = '\0';
(*x)--;
}
else if (game[*x - 1][*y] == '0' && game[*x - 2][*y] != '0'&& game[*x - 2][*y] != '#') {
game[*x][*y] = '\0';
game[*x - 1][*y] = '&';
game[*x - 2][*y] = '0';
(*x)--;
}
}
else if (flag == 's') {//向下移动
if (game[*x + 1][*y] == '\0') {
game[*x + 1][*y] = '&';
game[*x][*y] = '\0';
(*x)++;
}
else if (game[*x + 1][*y] == '0' && game[*x + 2][*y] != '#') {
game[*x][*y] = '\0';
game[*x + 1][*y] = '&';
game[*x + 2][*y] = '0';
(*x)++;
}
}
else if (flag == 'a') {//向左移动
if (game[*x][*y - 1] == '\0') {
game[*x][*y - 1] = '&';
game[*x][*y] = '\0';
(*y)--;
}
else if (game[*x][*y - 1] == '0' && game[*x][*y - 2] != '#') {
game[*x][*y] = '\0';
game[*x][*y - 1] = '&';
game[*x][*y - 2] = '0';
(*y)--;
}
}
else if (flag == 'd') {//向右移动
if (game[*x][*y + 1] == '\0') {
game[*x][*y + 1] = '&';
game[*x][*y] = '\0';
(*y)++;
}
else if (game[*x][*y + 1] == '0' && game[*x][*y + 2] != '#') {
game[*x][*y] = '\0';
game[*x][*y + 1] = '&';
game[*x][*y + 2] = '0';
(*y)++;
}
}
return 1;
}
//用户输入界面菜单
void menu_palyer(void) {
printf("请输入wsad分别表示上下左右移动\n");
printf("您可以选择输入c 重新开始本关卡\n");
printf("请输入:>");
}
//输出游戏
void put_game(char** game,int length,int width) {
for (int i = 0;i < width;i++) {
for (int j = 0;j < length;j++) {
printf("%c", game[i][j]);
if (game[i][j] == '\0') {
printf(" ");
}
}
printf("\n");
}
}
//开始菜单
void menu(void) {
printf("***************************\n");
printf("*******三月三款推箱子******\n");
printf("********输入 1 play********\n");
printf("********输入 0 exit********\n");
printf("***************************\n");
printf("请输入:>");
}