上次我發了一個移動小遊戲,但我本人都覺得無聊,所以今天發一個推箱子吧(不知道用什麼語氣詞)
首先,請看一下我的上一篇遊戲文章,學一下基礎
移動小遊戲
看完了嗎,好,開始我們今天的實戰吧!
首先,我們要做好地圖和標頭檔案
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <windows.h>
using namespace std;
char a[100][100]={
"################",
"#* #",
"# & ! #",
"# & ! #",
"# ! & #",
"################",
};
int main(){
for(int i=0;i<=15;i++)
puts(a[i]);
return 0;
}
這個我們以*為人,&為箱子,!為要把箱子推到的地方
接著,開始移動吧!
但是,我們不僅要讓人走,箱子也要走,所以我們要再添幾個判斷:
如果前面有一個箱子,就推動它;
如果前面有兩個及以上的箱子,就不動;
如果把箱子推到了要推到的地方,就清空箱子
我們可以在按下按鍵的同時判斷
OK,現在我們只要先搞一個while迴圈,再用ch去_getch(),再判斷是什麼鍵和移動
這裡建議用switch:
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <windows.h>
using namespace std;
char ch;
int x=1,y=1;
char a[100][100]={
"################",
"#* #",
"# & ! #",
"# & ! #",
"# ! & #",
"################",
};
int main(){
system("title 推箱子小遊戲");
for(int i=0;i<=10;i++)
puts(a[i]);
while(1){
ch=_getch();
switch(ch){
case 'w':
if(a[x-1][y]!='#'){
a[x][y]=' ';
x--;
a[x][y]='*';
}
break;
case 's':
if(a[x+1][y]!='#'){
a[x][y]=' ';
x++;
a[x][y]='*';
}
break;
case 'a':
if(a[x][y-1]!='#'){
a[x][y]=' ';
y--;
a[x][y]='*';
}
break;
case 'd':
if(a[x][y+1]!='#'){
a[x][y]=' ';
y++;
a[x][y]='*';
}
break;
}
system("cls");
for(int i=0;i<=10;i++)
puts(a[i]);
}
return 0;
}
偵錯一下,讓小人再上面走走,哎呀,走遍整個地圖後,小人怎麼把東西都"吃掉"了啊,這可不行,因為我們少了點判斷:
在每個按鍵的中間加一條判斷,OK,先判斷是不是箱子:
case 'w':
if(a[x-1][y]==' '){
a[x][y]=' ';
x--;
a[x][y]='*';
}
else if(a[x-1][y]=='&'){//如果是箱子
if(a[x-2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x--;
a[x][y]='*';
a[x-1][y]='&';
}
}
break;
我這裡示範了上移鍵,如果人前面是空的,那就走,是箱子的話,就再判斷箱子前面是不是空的如果是就移動
好了,那還等啥,擼起袖子加油幹,別的鍵也寫一下吧!
好,先把目前程式碼放出來:
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <windows.h>
using namespace std;
char ch;
int x=1,y=1;
char a[100][100]={
"################",
"#* #",
"# & ! #",
"# & ! #",
"# ! & #",
"################",
};
int main(){
system("title 推箱子小遊戲");
for(int i=0;i<=10;i++)
puts(a[i]);
while(1){
ch=_getch();
switch(ch){
case 'w':
if(a[x-1][y]==' '){
a[x][y]=' ';
x--;
a[x][y]='*';
}
else if(a[x-1][y]=='&'){//如果是箱子
if(a[x-2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x--;
a[x][y]='*';
a[x-1][y]='&';
}
}
break;
case 's':
if(a[x+1][y]==' '){
a[x][y]=' ';
x++;
a[x][y]='*';
}
else if(a[x+1][y]=='&'){//如果是箱子
if(a[x+2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x++;
a[x][y]='*';
a[x+1][y]='&';
}
}
break;
case 'a':
if(a[x][y-1]==' '){
a[x][y]=' ';
y--;
a[x][y]='*';
}
else if(a[x][y-1]=='&'){//如果是箱子
if(a[x][y-2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y--;
a[x][y]='*';
a[x][y-1]='&';
}
}
break;
case 'd':
if(a[x][y+1]==' '){
a[x][y]=' ';
y++;
a[x][y]='*';
}
else if(a[x][y+1]=='&'){//如果是箱子
if(a[x][y+2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y++;
a[x][y]='*';
a[x][y+1]='&';
}
}
break;
}
system("cls");
for(int i=0;i<=10;i++)
puts(a[i]);
}
return 0;
}
OK,推一推,是不是可以了?但是,我們把它推到"!"時,卻不能動了,因為我們少了一層判斷:
case 'w':
if(a[x-1][y]==' '){
a[x][y]=' ';
x--;
a[x][y]='*';
}
else if(a[x-1][y]=='&'){//如果是箱子
if(a[x-2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x--;
a[x][y]='*';
a[x-1][y]='&';
}
else if(a[x-2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x--;//人物移動
a[x][y]='*';
a[x-1][y]=' ';//前方清空
}
}
break;
可以看到,這裡依然用上移鍵做示範:如果是要推到的地方,就人物移動,再把前方清空,OK,把別的也寫上吧!
好,再把目前的程式碼放出來:
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <windows.h>
using namespace std;
char ch;
int x=1,y=1;
char a[100][100]={
"################",
"#* #",
"# & ! #",
"# & ! #",
"# ! & #",
"################",
};
int main(){
system("title 推箱子小遊戲");
for(int i=0;i<=10;i++)
puts(a[i]);
while(1){
ch=_getch();
switch(ch){
case 'w':
if(a[x-1][y]==' '){
a[x][y]=' ';
x--;
a[x][y]='*';
}
else if(a[x-1][y]=='&'){//如果是箱子
if(a[x-2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x--;
a[x][y]='*';
a[x-1][y]='&';
}
else if(a[x-2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x--;//人物移動
a[x][y]='*';
a[x-1][y]=' ';//前方清空
}
}
break;
case 's':
if(a[x+1][y]==' '){
a[x][y]=' ';
x++;
a[x][y]='*';
}
else if(a[x+1][y]=='&'){//如果是箱子
if(a[x+2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x++;
a[x][y]='*';
a[x+1][y]='&';
}
else if(a[x+2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x++;//人物移動
a[x][y]='*';
a[x+1][y]=' ';//前方清空
}
}
break;
case 'a':
if(a[x][y-1]==' '){
a[x][y]=' ';
y--;
a[x][y]='*';
}
else if(a[x][y-1]=='&'){//如果是箱子
if(a[x][y-2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y--;
a[x][y]='*';
a[x][y-1]='&';
}
else if(a[x][y-2]=='!'){//如果前面是"!"
a[x][y]=' ';
y--;//人物移動
a[x][y]='*';
a[x][y-1]=' ';//前方清空
}
}
break;
case 'd':
if(a[x][y+1]==' '){
a[x][y]=' ';
y++;
a[x][y]='*';
}
else if(a[x][y+1]=='&'){//如果是箱子
if(a[x][y+2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y++;
a[x][y]='*';
a[x][y+1]='&';
}
else if(a[x][y+2]=='!'){//如果前面是"!"
a[x][y]=' ';
y++;//人物移動
a[x][y]='*';
a[x][y+1]=' ';//前方清空
}
}
break;
}
system("cls");
for(int i=0;i<=10;i++)
puts(a[i]);
}
return 0;
}
好了,但是推完了,電腦好像並木有給你驚喜,應為我們還沒寫呢!
我們的思路是:每推好一個箱子就用一個變數(初始化為0)+1(這裡用sum),當sum等於箱子數,就退出迴圈,說出「你勝利了"的臺詞,如這樣:
else if(a[x-2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x--;//人物移動
a[x][y]='*';
a[x-1][y]=' ';//前方清空
sum++;
}
好,再改一下while的條件:while(sum<3)(這裡有3個箱子)一個超級簡單的推箱子就完成了(p≧w≦q)!
下面放一下程式碼:
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <windows.h>
using namespace std;
char ch;
int x=1,y=1,sum=0;
char a[100][100]={
"################",
"#* #",
"# & ! #",
"# & ! #",
"# ! & #",
"################",
};
int main(){
system("title 推箱子小遊戲");
for(int i=0;i<=10;i++)
puts(a[i]);
while(sum<3){
ch=_getch();
switch(ch){
case 'w':
if(a[x-1][y]==' '){
a[x][y]=' ';
x--;
a[x][y]='*';
}
else if(a[x-1][y]=='&'){//如果是箱子
if(a[x-2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x--;
a[x][y]='*';
a[x-1][y]='&';
}
else if(a[x-2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x--;//人物移動
a[x][y]='*';
a[x-1][y]=' ';//前方清空
sum++;
}
}
break;
case 's':
if(a[x+1][y]==' '){
a[x][y]=' ';
x++;
a[x][y]='*';
}
else if(a[x+1][y]=='&'){//如果是箱子
if(a[x+2][y]==' '){//如果前面都沒有
a[x][y]=' ';//移動
x++;
a[x][y]='*';
a[x+1][y]='&';
}
else if(a[x+2][y]=='!'){//如果前面是"!"
a[x][y]=' ';
x++;//人物移動
a[x][y]='*';
a[x+1][y]=' ';//前方清空
sum++;
}
}
break;
case 'a':
if(a[x][y-1]==' '){
a[x][y]=' ';
y--;
a[x][y]='*';
}
else if(a[x][y-1]=='&'){//如果是箱子
if(a[x][y-2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y--;
a[x][y]='*';
a[x][y-1]='&';
}
else if(a[x][y-2]=='!'){//如果前面是"!"
a[x][y]=' ';
y--;//人物移動
a[x][y]='*';
a[x][y-1]=' ';//前方清空
sum++;
}
}
break;
case 'd':
if(a[x][y+1]==' '){
a[x][y]=' ';
y++;
a[x][y]='*';
}
else if(a[x][y+1]=='&'){//如果是箱子
if(a[x][y+2]==' '){//如果前面都沒有
a[x][y]=' ';//移動
y++;
a[x][y]='*';
a[x][y+1]='&';
}
else if(a[x][y+2]=='!'){//如果前面是"!"
a[x][y]=' ';
y++;//人物移動
a[x][y]='*';
a[x][y+1]=' ';//前方清空
sum++;
}
}
break;
}
system("cls");
for(int i=0;i<=10;i++)
puts(a[i]);
}
cout<<"你勝利了!";
return 0;
}
好了,今天的遊戲時間就結束吧,下集——貪吃蛇,讓我們拭目以待吧!