this.setVisible(true);
}
public static void main(String[] args) {
new CelMove();
}
// 绘制方块的类
class CelJPanel extends JPanel {
int lx, ly;
public CelJPanel(int lx, int ly) {
super();
this.lx = lx;
this.ly = ly;
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fillRect(lx, ly, 20, 20);
}
}
}
你参考下吧,很久前写的
java 里如何实现打这样一张图载入后,上下左右控制人物行走呢?这个叫人物行走方位图吧,一般多用于制作RPG类游戏,比较常见的一种做法是,取坐标:你定义一个矩形,刚好框住一个人 , 这样就把一个人物动作取出来了,然后控制框的坐标移动,取下一个动作,直到一个动作循环完成!一楼的办法也可以,不过是切重新切图片 , 比较麻烦,载入的时候,也比较麻烦!
Java 鼠标控制人物移动,地图随人物移动去学习A星寻路,可以得到最短路径,其中也包括了绕开障碍物的代码 , 然后就是动画的图片切换了,如果说要地图跟随主角移动,那个应该是滚屏操作 , 也就是说你主角往右走 , 超过窗口或者屏幕(全屏)坐标一半的时候,地图整个往左移动,速度和主角的一样就出来效果了 。如果你看不懂A星的话,那咂就给你一段BFS的C++语言代码,自己转换成JAVA代码写法(就是改些关键字,有不少经典的游戏算法都来自C/C++)就可以了,这个是简化版的A星寻路,一样可以找到最近的路径,你把path 这个路径记录下来再换算成像素位置就可以得到行走的具体步伐了...
#include "stdafx.h"
#include iostream
using namespace std;
const int rows = 10;//行数
const int cols = 10;//列数
const int nummax = 4;//每一步 , 下一步可以走的方向:4个
//四种移动方向(左、右、上、下)对x、y坐标的影响
//x坐标:竖直方向,y坐标:水平方向
const char dx[nummax] = {0,0,-1,1};
const char dy[nummax] = {-1,1,0,0};
//障碍表
char block[rows][cols] = {
0,1,0,0,0,0,0,0,0,0,
0,1,1,0,1,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,
1,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,0,
0,1,0,0,0,0,1,0,0,0,
0,0,0,0,0,0,1,1,0,1,
0,1,0,0,0,1,0,1,0,1,
0,1,1,1,0,0,0,1,0,1,
0,0,0,0,0,0,0,0,0,0,
};
char block2[rows][cols] = {
0,1,0,0,0,0,0,0,0,0,
0,1,1,0,1,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,
1,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,0,
0,1,0,0,0,0,1,0,0,0,
0,0,0,0,0,0,1,1,0,1,
0,1,0,0,0,1,0,1,0,1,
0,1,1,1,0,0,0,1,0,1,
0,0,0,0,0,0,0,0,0,0,
};
char path[rows][cols] = {0};//记录路径
int startX = 0,startY = 0;//起始点坐标
int endX = rows - 1,endY = cols - 1;//目标点坐标
//保存节点位置坐标的数据结构
typedef struct tagQNode{
char x,y;
int parentNode;//父节点索引
}QNode;
//打印路径
void printPath()
{
cout""endl;
for (int i = 0;irows;++i)
{
for (int j = 0;jcols;++j)
{
if (1 == path[i][j])
{
cout"♀";
}
else if(block2[i][j]==0)
cout"∷";
else if(block2[i][j]==1)
cout"■";
}
coutendl;
}
coutendl;
coutendl;
}
void BFS()
{
int num = rows * cols;
//利用数组来模拟队列
QNode *queue = (QNode *)malloc(num * sizeof(QNode));
//起始点入队列
queue[0].x = queue[0].y = 0;
queue[0].parentNode = -1;//起始点没有父节点
int front = 0,rear = 1;//队列的头和尾
while(front != rear)//队列不为空
推荐阅读
- linux中各命令的意义,linux各种命令
- zblog插件原理,zblog插件破解插件
- 软件刚开直播电视,打开直播电视
- go语言slice使用 go语言strconv
- 关于c语言设计车辆限行的信息
- 欧版p40pro可以升级鸿蒙吗,欧版p40pro在国内可以用5g吗
- 宝宝巴士游戏老鼠大冒险,宝宝巴士小老鼠乡下老鼠
- 关于vb.net视频百度云盘的信息
- 魔幻车神什么视频能看,魔幻车神的影视