小白来装逼了-自动走迷宫
c4droid吧
全部回复
仅看楼主
level 11
先上图
2016年01月25日 14点01分 1
level 11
那个红色的人会自动走出迷宫[滑稽]
下回进移动迷宫一定要带上它
2016年01月25日 14点01分 2
用的什么思路?
2016年01月27日 02点01分
@简单aaaaaaa 源码发下面了,原理就是人物一直靠右手走,一定可以出去或者回到原地
2016年01月27日 02点01分
一直靠右手肯定会饿死在迷宫[滑稽]
2016年04月11日 02点04分
level 11
百度云已经废了,下面放代码[滑稽]
2016年01月25日 14点01分 3
level 11
首先……我是小白,所以代码肯定很白,大神勿喷。
2016年01月25日 14点01分 4
level 11
#ifndef _MAP_H_
#define _MAP_H_
/*Map类*/
class Map
{
public :
Map(int w, int h);
~Map();
void draw();//绘制地图
void init(int *p);//传入地图数组初始化
int getWidth();//获取地图宽
int getHeight();//获取地图高
int getSta(int x, int y);//获取图块
private :
int Width;
int Height;
int *map;
};
#endif
2016年01月25日 14点01分 5
map.h
2016年01月25日 15点01分
level 11
地图类完结[滑稽]
2016年01月25日 15点01分 8
level 11
#ifndef _PERSON_H_
#define _PERSON_H_
#include "Map.h"
/*Person.h
人类类……*/
class Person
{
public:
Person(int x, int y, int sta);
~Person();
void run(Map &map);//运动(在地图上)
void draw();//绘制人类
void setSta(int sta);//设置人类行走状态
int getX();
int getY();
private:
int x;
int y;
int sta;
};
#endif
2016年01月25日 15点01分 9
person.h
2016年01月25日 15点01分
level 11
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include "Person.h"
using namespace std;
Person::Person(int x, int y, int sta)
{
this->x=x;
this->y=y;
this->sta=sta;
}
Person::~Person()
{
}
void Person::setSta(int sta)
{
this->sta=sta;
}
//人物行走,采取靠右走的方式
void Person::run(Map &map)
{
if(x>=0&&x<map.getWidth())
if(y>=0&&y<map.getHeight())
switch(sta)
{
case 9://右下时
//下方可走
if(!map.getSta(x, y+1))
{
y++;
setSta(7);//设置左下
break;
}
//没有阻碍
if(!map.getSta(x+1, y))
{
x++;
}
else
{
setSta(3);//设置右上
}
break;
case 1://左上时
//上方可走
if(!map.getSta(x, y-1))
{
y--;
setSta(3);//设置为右上
break;
}
//没有阻碍
if(!map.getSta(x-1, y))
{
x--;
}
else
{
setSta(7);//设置左下
}
break;
case 3://右上时
//右方可行
if(!map.getSta(x+1, y))
{
x++;
setSta(9);//设置右下
break;
}
//无阻碍
if(!map.getSta(x, y-1))
{
y--;
}
else
{
setSta(1);//设置左上
}
break;
case 7://左下时
//左方可走
if(!map.getSta(x-1, y))
{
x--;
setSta(1);//设置左上
break;
}
//无阻碍
if(!map.getSta(x, y+1))
{
y++;
}
else
{
setSta(9);//设置右下
}
break;
}
}
//绘制大人类
void Person::draw()
{
gotoxy(2*x+1, y+1);//定位
printf("\033[45;32m");//换颜色
cout<<" ";
gotoxy(0, 0);
cout<<endl;//输出缓存……
gotoxy(0, 0);//回到原位
}
int Person::getX()
{
return x;
}
int Person::getY()
{
return y;
}
2016年01月25日 15点01分 10
person.cpp
2016年01月25日 15点01分
level 11
人类完结[滑稽]
说实话这个坑了……
之前没写输出换行,每次人物在地图那里刷新出来,结果就是人物闪烁[狂汗]
还有就是……我在Map.cpp不能用gotoxy不晓得咋回事,一加入头文件错误就一页半……
所以在人物这里让光标回到0,0[滑稽]
2016年01月25日 15点01分 11
level 11
#include <iostream>
#include <unistd.h>
using namespace std;
#include "Map.h"
#include "Person.h"
/*****************
自动走迷宫
作者:小蟀
开发平台:
C4droid
请选择:
G++编译器
1126390395
******************/
int map[]=
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
1, 1, 0, 0, 1, 0, 0, 1, 0, 1,
1, 1, 1, 0, 1, 1, 0, 0, 0, 1,
1, 1, 1, 0, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 0, 0, 0, 1, 0, 1,
1, 0, 1, 1, 1, 0, 1, 1, 0, 1,
1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
};
int main()
{
printf("\033[?25l");
Map myMap(10, 10);
myMap.init(map);
Person myPer(4, 9, 3);
while(1)
{
myPer.run(myMap);
myMap.draw();
myPer.draw();
usleep(200000);
if(myPer.getX()==4)
if(myPer.getY()==9)
{
cout<<"失败\n"<<endl;
break;
}
if(myPer.getX()==6)
if(myPer.getY()==0)
{
cout<<"成功\n"<<endl;
break;
}
}
return 0;
}
有了两个类,这个几乎可以无视[喷]
2016年01月25日 15点01分 12
main.cpp
2016年01月25日 15点01分
level 11
拜拜,该睡觉了
2016年01月25日 15点01分 13
level 11
2016年01月25日 15点01分 14
level 12
看不懂[啊]
2016年01月25日 15点01分 15
c++写的,运动逻辑在Person的run方法 看那里就行了
2016年01月25日 15点01分
level 12
全部复制了 打不开啊[啊]
2016年01月25日 15点01分 16
你是不是没复制第一个Map类,是Map.h
2016年01月25日 15点01分
回复 kingsley赛 :复制了啊 [不高兴]
2016年01月25日 15点01分
@早睡早起💤💤 文件: Map.h, Person.h, Map.cpp, Person.cpp, main.cpp 。长按编译采取多文件编译
2016年01月25日 15点01分
level 11
长按编译,采取多文件编译
2016年01月25日 15点01分 17
1 2 3 尾页