尝试写PRG地图切换失败,repaint无法正常生效,请大家赐教

龙宝小圆润 2018-07-02 10:45:23
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class MapPanel extends JPanel implements KeyListener{
int CS=32;
int offx=0;
int offy=0;
int direction;
Image floor;
Image wall;
Image hero;
boolean mapflag=false;
int vax=2;
int vay=2;
int[][] map;
public MapPanel(int row,int col){
setPreferredSize(new Dimension(160,160));
loadImage();
addKeyListener(this);
new MoveThread().start();
map=new int[row][col];
}

public void loadImage(){
ImageIcon icon=new ImageIcon(getClass().getResource("image/floor.jpg"));
floor=icon.getImage();
icon=new ImageIcon(getClass().getResource("image/wall.jpg"));
wall=icon.getImage();
icon=new ImageIcon(getClass().getResource("image/hero.jpg"));
hero=icon.getImage();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
drawMap(g);
}
public void drawMap(Graphics g){
for(int x=0;x<map.length;x++){
for(int y=0;y<map[0].length;y++){
if(this.map[x][y]==0){
g.drawImage(floor,y*CS+offx,x*CS+offy,this);
}else if(this.map[x][y]==1){
g.drawImage(wall,y*CS+offx,x*CS+offy,this);
}
}
}
g.drawImage(hero,2*CS,2*CS,3*CS,3*CS,0,0,CS,CS,this);
}
public void keyTyped(KeyEvent e){}
public void keyPressed(KeyEvent e){
int code=e.getKeyCode();
switch(code){
case KeyEvent.VK_UP:
direction=0;
if(isAllow(direction)){
mapflag=true;
}
break;
case KeyEvent.VK_RIGHT:
direction=1;
if(isAllow(direction)){
mapflag=true;
}
break;
case KeyEvent.VK_DOWN:
direction=2;
if(isAllow(direction)){
mapflag=true;
}
break;
case KeyEvent.VK_LEFT:
direction=3;
if(isAllow(direction)){
mapflag=true;
}
break;
}
}//按下
public void keyReleased(KeyEvent e){
int code=e.getKeyCode();
switch(code){
case KeyEvent.VK_UP:
mapflag=false;
break;
case KeyEvent.VK_RIGHT:
mapflag=false;
break;
case KeyEvent.VK_DOWN:
mapflag=false;
break;
case KeyEvent.VK_LEFT:
mapflag=false;
break;
}
}//弹起
public boolean isAllow(int i){
switch(i){
case 0:
if(map[vax-1][vay]==1){
return false;
}else{
return true;
}
case 1:
if(map[vax][vay+1]==1){
return false;
}else{
return true;
}
case 2:
if(map[vax+1][vay]==1){
return false;
}else{
return true;
}
case 3:
if(map[vax][vay-1]==1){
return false;
}else{
return true;
}
default: return false;
}
}
public void moveMap(int i){
switch(i){
case 0:offy++;
break;
case 1:offx--;
break;
case 2:offy--;
break;
case 3:offx++;
break;
}
}

public void moveRole(int i){
switch(i){
case 0:vax--;
break;
case 1:vay++;
break;
case 2:vax++;
break;
case 3:vay--;
break;
}
}
class MoveThread extends Thread{
public void run(){
while(true){
while(mapflag){
moveRole(direction);
for(int i=0;i<32;i++){
moveMap(direction);
try{
Thread.sleep(10);
}catch(Exception e){}
repaint();
}
}
}
}
}
}
public class HateMap extends JFrame{
boolean mapgo=true;
MapPanel map1;
MapPanel map2;
Container cont;
public HateMap(){
cont=getContentPane();
map1=new MapPanel(5,8);
int a[][]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1},
{1,1,0,0,1,1,0,1},
{1,0,0,0,1,0,0,3},
{1,1,1,1,1,1,1,1},
};

map1.map=a;
map2=new MapPanel(6,8);
map2.vax=1;
map2.vay=0;
int b[][]={
{1,1,1,1,1,1,1,1},
{3,0,0,0,0,0,0,1},
{1,1,1,0,1,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,1,0,1,0,0,1},
{1,1,1,1,1,1,1,1},
};
map2.map=b;
map2.setBackground(Color.blue);
cont.add(map1);
map1.setFocusable(true);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMap();
}
public void setMap(){//这里这个类,就是窗口用来切换场景的一个类
while(true){
if(map1.vax==3&&map1.vay==7&&mapgo){
mapgo=false;
remove(map1);
add(map2);
setFocusable(true);
repaint();
}else{}
}
}
/* class MapThread extends Thread{
public void run(){
while(true){
try{
repaint();
Thread.sleep(100);
}catch(Exception e){
}
}
}
}*/
public static void main(String[] args){
new HateMap();
}
}
...全文
122 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文提出一种基于鱼鹰优化算法(OOA)优化的CNN-BiGUR-Attention混合模型,用于提升短期风电功率预测的精度与稳定性,采用Matlab实现代码仿真。该模型融合卷积神经网络(CNN)提取输入数据的局部空间特征,利用双向门控循环单元(BiGUR)捕捉风速、功率等时间序列的前后向动态依赖关系,并引入注意力机制自适应强化关键时间步的特征权重,从而增强模型对非平稳风电数据的表征能力;进一步,采用OOA算法对模型超参数进行全局寻优,有效提升模型收敛速度与泛化性能。研究基于实际风电场历史数据开展实验验证,结果表明,该方法相较传统模型在预测精度、鲁棒性和误差抑制方面表现更优,适用于高比例可再生能源接入背景下的电力系统调度需求。; 适合人群:从事新能源发电预测、电力系统优化调度、智能算法与深度学习融合应用等方向的科研人员及工程技术人员,尤其适合具备Matlab编程能力、熟悉时间序列建模与深度学习框架的研究者。; 使用场景及目标:①实现风电场短期功率高精度预测,支撑电网安全稳定调度与能量管理;②为深度学习模型结构设计与智能优化算法联合调参提供实践范例;③推动人工智能技术在可再生能源预测、智能电网运行等领域的落地应用。; 阅读建议:建议结合提供的Matlab代码深入理解CNN-BiGUR-Attention网络架构搭建、注意力机制实现方式及OOA优化流程,重点关注数据预处理、模型训练与参数调优细节,可通过替换不同风电数据集进行对比实验,进一步掌握模型迁移能力与适应性。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧