用c语言写一个推箱子小游戏1-5关

头文件:

#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("请输入:>");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月三ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值