C/C++編寫推箱子小游戲
本文實例為大家分享了C/C++編寫推箱子小游戲的具體代碼,供大家參考,具體內(nèi)容如下
我們用' #'來代表墻,‘O'來代表箱子,' * '代表終點,‘@'代表箱子已經(jīng)到達(dá)終點,‘S來表示人'。
注意:W,A,S,D為方向鍵,而且要在英文格式下
運(yùn)行示例:

以下為完整代碼:
/*
推箱子(示例二)
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
int main()
{
char a[12][12]={"##########",
"## ###",
"##O### #",
"# S O O #",
"# **# O ##",
"##**# ##",
"##########",
};
int x=3,y=2;
int i;
char ch;
for(i=0;i<7;i++)
puts(a[i]);
while(a[4][2]!='@'||a[4][3]!='@'||a[5][2]!='@'||a[5][3]!='@')
{
ch=getch();
if(ch=='s')
{
if(a[x+1][y]!='#'&&a[x+1][y]!='O'&&a[x+1][y]!='@') //如果只有人,沒有箱子
{
a[x][y]=' ';
x++;
a[x][y]='S';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='*') //如果是箱子和人一起走
{
a[x][y]=' ';
x++;
a[x][y]='S';
a[x+1][y]='O';
}
else if(a[x+2][y]!='#'&&(a[x+1][y]=='O'||a[x+1][y]=='@')&&a[x+2][y]=='*') //如果人和箱子一起走,并且前面是終點
{
a[x][y]=' ';
x++;
a[x][y]='S';
a[x+1][y]='@';
}
}
if(ch=='w')
{
if(a[x-1][y]!='#'&&a[x-1][y]!='O'&&a[x-1][y]!='@') //如果只有人,沒有箱子
{
a[x][y]=' ';
x--;
a[x][y]='S';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O') //如果是箱子和人一起走
{
a[x][y]=' ';
x--;
a[x][y]='S';
a[x-1][y]='O';
}
else if(a[x-2][y]!='#'&&(a[x-1][y]=='O'||a[x-1][y]=='@')&&a[x-2][y]=='*') //如果人和箱子一起走,并且前面是終點
{
a[x][y]=' ';
x--;
a[x][y]='S';
a[x-1][y]='@';
}
}
if(ch=='a')
{
if(a[x][y-1]!='#'&&a[x][y-1]!='O'&&a[x][y-1]!='@') //如果只有人,沒有箱子
{
a[x][y]=' ';
y--;
a[x][y]='S';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='O') //如果是箱子和人一起走
{
a[x][y]=' ';
y--;
a[x][y]='S';
a[x][y-1]='O';
}
else if(a[x][y-2]!='#'&&(a[x][y-1]=='O'||a[x][y-1]=='@')&&a[x][y-2]=='*') //如果人和箱子一起走,并且前面是終點
{
a[x][y]=' ';
y--;
a[x][y]='S';
a[x][y-1]='@';
}
}
if(ch=='d')
{
if(a[x][y+1]!='#'&&a[x][y+1]!='O'&&a[x][y+1]!='@') //如果只有人,沒有箱子
{
a[x][y]=' ';
y++;
a[x][y]='S';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O') //如果是箱子和人一起走
{
a[x][y]=' ';
y++;
a[x][y]='S';
a[x][y+1]='O';
}
else if(a[x][y+2]!='#'&&(a[x][y+1]=='O'||a[x][y+1]=='@')&&a[x][y+2]=='*'&&a[x][y+2]!='O') //如果人和箱子一起走,并且前面是終點
{
a[x][y]=' ';
y++;
a[x][y]='S';
a[x][y+1]='@';
}
}
if(a[4][2]!='@'&&a[4][2]!='S'&&a[4][2]!='*')
{
a[4][2]='*';
}
if(a[4][3]!='@'&&a[4][3]!='S'&&a[4][3]!='*')
{
a[4][3]='*';
}
if(a[5][2]!='@'&&a[5][2]!='S'&&a[5][2]!='*')
{
a[5][2]='*';
}
if(a[5][3]!='@'&&a[5][3]!='S'&&a[5][3]!='*')
{
a[5][3]='*';
}
if(a[1][2]=='O'||a[1][6]=='O'||a[2][8]=='O'||a[3][8]=='O'||a[5][5]=='O'||a[5][7]=='O') //判斷失敗的情況
{
break;
}
system("cls");
for(i=0;i<7;i++)
puts(a[i]);
}
system("cls");
if(a[4][2]!='@'||a[4][3]!='@'||a[5][2]!='@'||a[5][3]!='@')
printf("YOU LOSE!");
else
printf("YOU WIN!");
Sleep(3000);
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++非繼承時函數(shù)成員訪問屬性和類繼承過程中的訪問控制
這篇文章主要介紹了C++非繼承時函數(shù)成員訪問屬性和類繼承過程中的訪問控制,非繼承時,protected成員和private成員沒有任何區(qū)別,都是類內(nèi)部可以直接訪問它們、類外部的類對象不可訪問它們、類內(nèi)部的類對象可以訪問它們,更多詳細(xì)內(nèi)容請參考下面相關(guān)資料2022-03-03
詳解C++編程中標(biāo)記語句與復(fù)合語句的寫法
這篇文章主要介紹了C++編程中標(biāo)記語句與復(fù)合語句的寫法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01
C++實現(xiàn)主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換示例
這篇文章主要為大家介紹了C++實現(xiàn)主機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹
這篇文章主要介紹了C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

