|
|
|
// 给大家水一个人机cpp小程序 !!! // 推箱子炒鸡无迪简化版!!!(自豪)
// w+回车 前进 s+回车 后退 // a+回车 左移 d+回车 右移
// 这!就是石山枚举qwq #include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
int numm=10;
struct block
{
string type;
int pos[2];
}blocks[200];
int arr[400];
int random(int,int);
void init(int*,int,int);
void show_map();
void move(char,int,bool);
void update(char);
int test(int*,char);
int main(){
char n;
srand(time(NULL));
init(arr,20,20);
cout<<"\n\n\n\n\n\n\n\n";
show_map();
while(1){
cin>>n;
if(n=='0') break;
cout<<"\n\n\n\n\n\n\n\n";
if(test(arr,n)==1){
move(n,0,0);
update(n);
}
show_map();
}
return 0;
}
int random(int min_,int max_){
return rand() % (max_-min_+1)+min_;
}
void init(int *arr_,int n_,int m_){
for(int i=0;i<n_;i++){
for(int j=0;j<m_;j++){
if(i==0||i==14||j==0||j==14) arr_[i*15+j]=0;
else arr_[i*15+j]=1;
}
}
for(int i=0;i<=numm;i++){
blocks.type = "box";
for(int j=0;j<2;j++){
blocks.pos[j]=random(1,13);
}
}
blocks[0].type="people";
}
int test(int* arr_,char n_){
int ov;
for(int i=0;i<=1;i++) blocks[190].pos=blocks[0].pos;
while(1){
ov=0;
move(n_,190,1);
for(int i=1;i<=numm;i++){
if(blocks.pos[0]==blocks[190].pos[0]&&blocks.pos[1]==blocks[190].pos[1]){
ov=1;
break;
}
}
if(ov==0){
if(arr_[blocks[190].pos[1]*15+blocks[190].pos[0]]==1) break;
else return 0;
}
}
return 1;
}
void show_map(){
int s;
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
switch(arr[i*15+j])
{
case(0): cout<<"# "; break;
case(1):{
s=0;
for(int ii=0;ii<numm+1;ii++){
if(blocks[ii].pos[0]==j&&blocks[ii].pos[1]==i){
if(blocks[ii].type=="people") s=-1;
else s++;
}
}
if(s==0) cout<<" ";
else if(s==-1) cout<<"@ ";
//else cout<<s<<' ';
else cout<<"O ";
break;}
default: ;
}
}
cout<<'\n';
}
}
void move(char n_,int si_,bool upd){
switch(n_)
{
case('w'): if(blocks[si_].pos[1]>1||upd==1) blocks[si_].pos[1]--; break;
case('s'): if(blocks[si_].pos[1]<13||upd==1) blocks[si_].pos[1]++; break;
case('a'): if(blocks[si_].pos[0]>1||upd==1) blocks[si_].pos[0]--; break;
case('d'): if(blocks[si_].pos[0]<13||upd==1) blocks[si_].pos[0]++; break;
}
}
void update(char n){
for(int _=0;_<numm;_++){
for(int i=1;i<=numm;i++){
for(int j=0;j<=numm;j++){
if(i!=j)
if(blocks[j].pos[0]==blocks.pos[0]&&blocks[j].pos[1]==blocks.pos[1]){
move(n,i,0);
}
}
}
}
}
|
|