快捷导航
查看: 37|回复: 1

[闲聊] ##u 推箱子但是终端版 ##

[复制链接]

13

主题

89

帖子

184

积分

初级会员

Rank: 2

积分
184
发表于 4 天前 | 显示全部楼层 |阅读模式
// 给大家水一个人机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);
                }
            }
        }
    }
}

回复

使用道具 举报

13

主题

89

帖子

184

积分

初级会员

Rank: 2

积分
184
 楼主| 发表于 4 天前 | 显示全部楼层
[url=]推箱子但是终端.txt[/url]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站所有内容均收集自互联网,若本站收录的资源涉及您的版权或知识产权或其他利益,请附上版权证明邮件告知,在收到邮件后24小时内删除。

E-mail:shengmadx001@outlook.com

Powered by 蕉次元 X3.4 © 2001-2013 Comsenz Inc.蕉次元 网站地图

快速回复 返回顶部 返回列表