大一时候的期末大作业,一直没找到,在桌子缝里找到了优盘,现在才把内容放上来,希望能帮到你们。具体内容分为实验报告和程序具体代码。
程序设计基础
——期末大作业报告
实验设计
1.编写推箱子小游戏
2.使用C语言
3.使用Dev C++编程程序
4.实现小人移动判定
5.实现通关判定
实验分析
1.首先了解推箱子游戏的规则
2.使用代码完成基本的功能
3.判断移动是否正确
4.实现关卡之间的连接
5.判断游戏是否结束
6.尽量保证推箱子游戏的操作完整性
实现难点及解决方案
一、小人移动的判定
1. 该方向第一个方格为边界;
2. 该方向第一个方格是箱子,第二个方格是边界;
3.该方向第一个方格是箱子,第二个方格是放好位置的箱子;
4. 该方向第一个方格是箱子,第二个方格是箱子。
以上为小人无法移动的条件。
解决方案:
1. 人物移动时判断人物当前位置是空地还是目的地
2. 人物的移动的方向的前方是空地时可直接交换,
3. 人物的移动的方向的前方是箱子时需要再分几种情形
a. 箱子的前方是墙或箱子则无动作
b. 箱子的前方是空地则三者互换
c. 箱子的前方是目的地时则移动
二、地图的制作
1. 使用二维数组
2. 对游戏中的不同类型物体编号
3. 输出时根据数字不同输出不同形状:
1——墙
2——箱子
3——人物
4——目的地
部分代码如下:
(完整代码联系博主)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
int i=0;
int map_1[8][8]={
{0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,0},
{0,1,4,0,0,0,1,0},
{0,1,0,2,0,0,1,0},
{0,1,0,0,3,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0}
};
int map_2[8][8]={
{0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,0},
{0,0,0,0,1,4,1,0},
{0,0,0,0,1,0,1,0},
{0,1,1,1,1,2,1,0},
{0,1,3,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0}
};
int map_3[8][8]={
{0,0,1,1,1,0,0,0},
{0,0,1,4,1,0,0,0},
{0,0,1,2,1,1,1,1},
{1,1,1,0,0,2,4,1},
{1,4,0,2,3,1,1,1},
{1,1,1,1,2,1,0,0},
{0,0,0,1,4,1,0,0},
{0,0,0,1,1,1,0,0}
};
int map_4[8][8]={
{1,1,1,1,1,1,1,1},
{1,0,0,4,0,0,0,1},
{1,0,0,2,0,0,0,1},
{1,0,0,0,0,2,4,1},
{1,4,2,0,3,0,0,1},
{1,0,0,0,2,0,0,1},
{1,0,0,0,4,0,0,1},
{1,1,1,1,1,1,1,1}};
int map_5[8][8]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1},
{1,1,0,0,0,0,0,1},
{1,0,4,1,1,2,0,1},
{1,0,0,1,3,0,0,1},
{1,0,0,1,0,0,0,1},
{1,0,0,1,0,0,0,1},
{1,1,1,1,1,1,1,1}};
int map_6[8][8]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1},
{1,0,0,4,0,4,0,1},
{1,0,0,2,0,2,0,1},
{1,0,0,0,3,0,0,1},
{1,0,0,2,0,2,0,1},
{1,0,0,4,0,4,0,1},
{1,1,1,1,1,1,1,1}};
int map_7[8][8]={
{1,1,1,1,1,1,1,1},
{1,4,4,4,1,1,1,1},
{1,0,2,0,1,1,1,1},
{1,0,3,0,1,1,1,1},
{1,0,2,2,0,1,1,1},
{1,0,0,0,1,1,1,1},
{1,0,0,1,1,1,1,1},
{1,1,1,1,1,1,1,1}};
int map_8[8][8]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,1,1,1,1},
{1,4,0,2,1,1,1,1},
{1,4,0,3,0,0,1,1},
{1,1,2,0,1,0,1,1},
{1,1,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1},};
int map_9[8][8]={
{1,1,1,1,1,1,1,0},
{1,0,0,4,2,0,1,0},
{1,0,1,0,0,0,1,0},
{1,0,1,0,1,0,1,0},
{1,0,0,3,1,0,1,0},
{1,4,2,0,0,0,1,0},
{1,0,1,1,1,1,1,0},
{1,1,1,0,0,0,0,0},};
int map_10[8][8]={
{0,1,1,1,1,1,0,0},
{0,1,0,0,1,1,1,0},
{0,1,0,0,0,0,1,0},
{1,1,1,3,1,0,1,1},
{1,4,0,2,0,0,0,1},
{1,4,2,0,0,1,0,1},
{1,4,0,0,0,2,0,1},
{1,1,1,1,1,1,1,1},};
int x, y;
int map[8][8] = {0};
int shuchu()
{
for(x=0; x<8; x++)
{
for(y=0; y<8; y++)
{
if(map[x][y] == 1)
printf("X ");
if(map[x][y] == 3)
printf("P ");
if(map[x][y] == 2)
printf("Q ");
if(map[x][y] == 4)
printf("B ");
if(map[x][y] == 0)
printf(" ");
if(map[x][y] == 5)
printf("V ");
if(map[x][y] == 6)
printf("M ");
}
printf("\n");
}
return 0;
}
int zhujiemian()
{
printf(" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" welcome! \n"
" \n"
" \n"
" R : replay \n"
" WSAD : move \n"
" \n"
" \n");
}
int find()
{
for(x=0; x<8; x++)
for(y=0; y<8; y++)
{
if(map[x][y] == 3||map[x][y] == 6)
return 0;
}
return 0;
}
int count1()
{
int n=0;
for(x=0; x<8; x++)
for(y=0; y<8; y++)
{
if(map[x][y] == 4)
n++;
}
return n;
}
int count2()
{
int m=0;
for(x=0; x<8; x++)
for(y=0; y<8; y++)
{
if(map[x][y] == 5)
m++;
}
return m;
}
int up()
{
if(map[x][y] == 3)
{
if(map[x-1][y] == 0)
{
map[x-1][y] = 3;
map[x][y] = 0;
}
if(map[x-1][y] == 2 && map[x-2][y] == 4)
{
map[x][y] = 0;
map[x-1][y] = 3;
map[x-2][y] = 5;
}
if(map[x-2][y] == 0 && map[x-1][y] == 2)
{
map[x][y] = 0;
map[x-1][y] = 3;
map[x-2][y] = 2;
}
else if(map[x-1][y] == 4){
map[x][y] =0;
map[x-1][y] = 6;
}
}
else if(map[x][y] == 6){
if(map[x-1][y] == 0)
{
map[x-1][y] = 3;
map[x][y] = 4;
}
if(map[x-1][y] == 2 && map[x-2][y] == 4)
{
map[x][y] = 4;
map[x-1][y] = 3;
map[x-2][y] = 5;
}
if(map[x-2][y] == 0 && map[x-1][y] == 2)
{
map[x][y] = 4;
map[x-1][y] = 3;
map[x-2][y] = 2;
}
else if(map[x-1][y] == 4){
map[x][y] =4;
map[x-1][y] = 6;
}
}
return 0;
}
int down()
{
if(map[x][y] == 3)
{
if(map[x+1][y] == 0)
{
map[x+1][y] = 3;
map[x][y] = 0;
}
if(map[x+1][y] == 2 && map[x+2][y] == 4)
{
map[x][y] = 0;
map[x+1][y] = 3;
map[x+2][y] = 5;
}
if(map[x+2][y] == 0 && map[x+1][y] == 2)
{
map[x][y] = 0;
map[x+1][y] = 3;
map[x+2][y] = 2;
}
else if(map[x+1][y] == 4){
map[x][y] =0;
map[x+1][y] = 6;
}
}
else if(map[x][y] == 6){
if(map[x+1][y] == 0)
{
map[x+1][y] = 3;
map[x][y] = 4;
}
if(map[x+1][y] == 2 && map[x+2][y] == 4)
{
map[x][y] = 4;
map[x+1][y] = 3;
map[x+2][y] = 5;
}
if(map[x+2][y] == 0 && map[x+1][y] == 2)
{
map[x][y] = 4;
map[x+1][y] = 3;
map[x+2][y] = 2;
}
else if(map[x+1][y] == 4){
map[x][y] =4;
map[x+1][y] = 6;
}
}
return 0;
}