狐狸行走小游戏

今天写了一个小游戏,狐狸行走

主要实现了以下几个功能

1.人自动行走

2.背景会随着人物的行走进行改变

3.键盘监听,按下方向键,人物方向也会随之改变

4.人物不能走出画面外

下面是代码(还可以继续完善):

复制代码
  1 package games;
  2 
  3 import java.awt.*;
  4 import java.awt.event.*;
  5 import javax.swing.*;
  6 
  7 /**
  8  * @author: 赵哲
  9  * com.qf.01
 10  */
 11 @SuppressWarnings({"all"})
 12 public class Game {
 13 
 14 
 15     //TODO:变量“声明”在此
 16 
 17     int x = 400;
 18     int y = 500;
 19     int z = 0;
 20     int fx = 0;
 21     int dong = 0;
 22 
 23     窗口 ck = null;
 24     定时器 ds1 = null;
 25 
 26     Game() {
 27         //TODO:程序初始化在此
 28 
 29         ck = new 窗口();
 30         //窗口 宽+2*立体边, 高+2*立体边+标题栏
 31         ck.setSize(5 * 2 + 1000, 700 + 2 * 5 + 25);
 32         //设定窗口可见性setVisible  true/false
 33         ck.setVisible(true);
 34         //延时的毫秒
 35         ds1 = new 定时器(50);
 36     }
 37 
 38     class 窗口 extends JFrame {
 39         菜单 cd = null;
 40         面板 mb = null;
 41         窗口监听器 exit = null;
 42         键盘监听器 jp = null;
 43 
 44         窗口() {
 45             jp = new 键盘监听器();
 46             this.addKeyListener(jp);
 47 
 48             cd = new 菜单();
 49             this.setJMenuBar(cd);
 50 
 51             mb = new 面板();
 52             this.add(mb);
 53 
 54             exit = new 窗口监听器();
 55             this.addWindowListener(exit);
 56 
 57             this.repaint();
 58         }
 59 
 60         class 菜单 extends JMenuBar {
 61             JMenu dan;    //菜单
 62             JMenuItem xiang1; //菜单项
 63 
 64             菜单监听器 cdjtq;
 65 
 66             菜单() {
 67                 dan = new JMenu("游戏"); //菜单
 68                 xiang1 = new JMenuItem("开局"); //菜单项
 69 
 70                 this.add(dan);
 71                 dan.add(xiang1);
 72 
 73                 cdjtq = new 菜单监听器();
 74                 xiang1.addActionListener(cdjtq);
 75             }
 76 
 77             class 菜单监听器 implements ActionListener {
 78                 public void actionPerformed(ActionEvent e) {
 79                     //TODO:菜单事件处理
 80                     if (e.getSource() == xiang1) {
 81 
 82                     }
 83                 }
 84             }
 85         }
 86 
 87         class 窗口监听器 extends WindowAdapter {
 88             public void windowClosing(WindowEvent e) {
 89                 ds1.xc.stop();
 90                 System.exit(0);
 91             }
 92         }
 93 
 94         class 键盘监听器 implements KeyListener {
 95             //TODO:键盘处理,可加入KeyEvent.VK_XXX
 96             public void keyPressed(KeyEvent e) {
 97                 switch (e.getKeyCode()) {
 98                     case KeyEvent.VK_LEFT://
 99                         x -= 10;
100                         fx = 2;
101                         //z 增加 背景图片向右走
102                         //z 减少 背景图片向左走
103                         if (x < 0) {
104                             z += 20;
105 
106                             x = 0;
107                             if (z > 0) {
108                                 z = 0;
109                             }
110                         }
111 
112                         break;
113                     case KeyEvent.VK_RIGHT://
114                         x += 10;
115                         fx = 0;
116                         if(x>900)
117                         {
118                             z -=20;
119                             x=900;
120                             if(z<-2000)
121                             {
122                                 z=-2000;
123                             }
124                         }
125                         break;
126                     case KeyEvent.VK_UP://
127                         y -= 10;
128                         fx = 1;
129                         if(y<0)
130                         {
131                             y=0;
132                         }
133                         break;
134                     case KeyEvent.VK_DOWN://
135                         y += 10;
136                         fx = 3;
137                         if(y>550)
138                         {
139                             y=550;
140                         }
141                         break;
142                 }
143                 if (dong >= 3) {
144                     dong = 0;
145                 } else {
146                     dong++;
147                 }
148                 repaint();
149             }
150 
151             public void keyReleased(KeyEvent e) {
152             }
153 
154             public void keyTyped(KeyEvent e) {
155             }
156         }
157 
158         class 面板 extends JPanel {
159             鼠标监听器 sb = null;
160 
161             面板() {
162                 sb = new 鼠标监听器();
163                 this.addMouseListener(sb);
164                 this.addMouseMotionListener(sb);
165             }
166 
167             class 鼠标监听器 extends MouseAdapter implements MouseMotionListener {
168                 public void mousePressed(MouseEvent e) {
169                 }
170 
171                 public void mouseDragged(MouseEvent e) {
172                 }
173 
174                 public void mouseMoved(MouseEvent e) {
175                 }
176 
177                 public void mouseReleased(MouseEvent e) {
178                 }
179 
180                 public void mouseClicked(MouseEvent e)//鼠标单击
181                 {
182                     //mx my鼠标的位置
183                     int mx = e.getX();
184                     int my = e.getY();
185                     //鼠标左键    BUTTON1、右键BUTTON3
186                     if (e.getButton() == MouseEvent.BUTTON1) {
187                         //TODO:鼠标左键单击
188 
189                     }
190 
191                     repaint();
192                 }
193             }
194 
195             public void paint(Graphics g) {
196                 //g.setColor(Color.BLUE);    //设定颜色:RED GREEN  BLUE  ORANGE  WHITE  GRAY BLACK PINK
197                 //g.drawRect(左,上,宽,高);    //矩形
198                 //g.fillRect(左,上,宽,高);    //实心矩形
199                 //g.drawOval(左,上,宽,高);    //椭圆
200                 //g.fillOval(左,上,宽,高);        //实心椭圆
201 
202                 //Image  tu=(new ImageIcon( 路径 )).getImage();    //路径:图片-右键-属性-路径src/
203                 //g.drawImage(tu,x,y,null);
204 
205                 //TODO:绘图在此
206                 Image image = (new ImageIcon("fox/5.png")).getImage();
207                 g.drawImage(image, z, 0, null);
208 
209                 Image image2 = Toolkit.getDefaultToolkit().getImage("fox//" + fx + "-" + dong + ".png");
210                 g.drawImage(image2, x, y, null);
211 
212             }
213         }
214     }
215 
216     class 定时器 implements Runnable//实现Runnable接口
217     {
218         Thread xc = null;
219         long jianGe;
220 
221         定时器(long jianGe) {
222             this.jianGe = jianGe;
223             xc = new Thread(this);
224             xc.start();
225         }
226 
227         public void run() {
228             while (true) {
229                 try {
230                     xc.sleep(jianGe);
231 
232                     if (this == ds1) {
233                         //TODO:定时处理
234 
235                         switch (fx) {
236                             case 2://
237                                 x -= 20;
238                                 if (x < 0) {
239                                     z += 20;
240                                     x = 0;
241                                     if (z > 0) {
242                                         z = 0;
243                                     }
244                                 }
245                                 fx = 2;
246                                 break;
247                             case 0://
248                                 x += 20;
249                                 if (x > 900) {
250                                     z -= 20;
251                                     x = 900;
252                                     if (z < -2000) {
253                                         z = -2000;
254                                     }
255                                 }
256                                 fx = 0;
257                                 break;
258                             case 1://
259                                 y -= 20;
260                                 if (y < 0) {
261                                     y = 0;
262                                 }
263                                 fx = 1;
264                                 break;
265                             case 3://
266                                 y += 20;
267                                 if (y > 550) {
268                                     y = 550;
269                                 }
270                                 fx = 3;
271                                 break;
272                         }
273                         if (dong >= 3) {
274                             dong = 0;
275                         } else {
276                             dong++;
277                             ck.repaint();
278                         }
279                         ck.repaint();
280 
281                     }
282                 } catch (InterruptedException e) {
283                     e.printStackTrace();
284                 }
285             }
286         }
287     }
288 
289     //main主方法 ,主类的“入口方法”
290     public static void main(String[] args) {
291         new Game();
292     }
293 }
复制代码

利用了Java提供的JFrame类来实现

主要是坐标的改变来实现人物与背景的改变

posted @   LuckySnail  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示