首页 > 编程语言 >跟着王洋老师学编程 - 1.5 小球撞墙(switch逻辑,问题是:小球会出现消失的状态。。)

跟着王洋老师学编程 - 1.5 小球撞墙(switch逻辑,问题是:小球会出现消失的状态。。)

时间:2023-12-26 12:23:12浏览次数:36  
标签:case 1.5 mpb 10 王洋 小球 ++ flag public

一、我的思路

- 创建窗体、设定窗体大小

- 在窗体中添加画布,并将画布添加至线程

- 线程run()方法持续执行,坐标不断变化,画布随之重绘,形成小球下落的效果,并随时判断小球X轴、Y轴坐标,触底后,通过flag值调整坐标加减方向

代码一

 1 import java.awt.*;
 2 public class BallHitWall{
 3     public static void main(String args[]){
 4         Frame w = new Frame();
 5         w.setSize(1024,750);
 6 
 7         MyPanelBall mpb = new MyPanelBall();
 8         w.add(mpb);
 9 
10         Thread t = new Thread(mpb);
11         t.start();
12     
13         w.setVisible(true);
14         
15     }
16 }
17 
18 class MyPanelBall extends Panel implements Runnable{
19     int x=10,y=10,flag=0;
20     public void paint(Graphics g){
21         g.setColor(Color.red);
22         g.fillOval(x,y,10,10);
23     }
24     public void run(){
25         while(true){
26             switch(flag){
27                 case 0: x++;y++;
28                 case 1: x++;y--;
29                 case 2: x--;y++;
30             }
31             if(y>750){
32                 flag=1;
33             }
34             if(x>1024){
35                 flag=2;
36             }
37             if(x<2||y<2){
38                 flag=0;
39             }
40             System.out.println(flag);
41             System.out.println("x:"+x);
42             System.out.println("y:"+y);
43             try{
44                 Thread.sleep(10);
45             }catch(Exception e){}
46             repaint();
47         }
48     }
49 }

 执行结果

小球触底后没有反弹,X\Y轴坐标一直停留在751没变化

冥思苦想无果,下班路上走了一圈,以为是flag重新赋值的代码块位置不对,调整至switch前面,运行,结果依旧。。。查百度——switch用错了?

https://m.runoob.com/java/java-switch-case.html

Break,break,break……

改代码如下:

 1 import java.awt.*;
 2 public class BallHitWall{
 3     public static void main(String args[]){
 4         Frame w = new Frame();
 5         w.setSize(1024,750);
 6 
 7         MyPanelBall mpb = new MyPanelBall();
 8         w.add(mpb);
 9 
10         Thread t = new Thread(mpb);
11         t.start();
12     
13         w.setVisible(true);
14         
15     }
16 }
17 
18 class MyPanelBall extends Panel implements Runnable{
19     int x=10,y=10,flag=0;
20     public void paint(Graphics g){
21         g.setColor(Color.red);
22         g.fillOval(x,y,10,10);
23     }
24     public void run(){
25         while(true){
26             switch(flag){
27                 case 0: x++;y++;
28                 case 1: x++;y--;
29                 case 2: x--;y++;
30             }
31             if(y>750){
32                 flag=1;
33             }
34             if(x>1024){
35                 flag=2;
36             }
37             if(x<2||y<2){
38                 flag=0;
39             }
40             System.out.println(flag);
41             System.out.println("x:"+x);
42             System.out.println("y:"+y);
43             try{
44                 Thread.sleep(10);
45             }catch(Exception e){}
46             repaint();
47         }
48     }
49 }

到底是什么问题 

 1 import java.awt.*;
 2 public class BallHitWall{
 3     public static void main(String args[]){
 4         Frame w = new Frame();
 5         w.setSize(400,300);
 6 
 7         MyPanelBall mpb = new MyPanelBall();
 8         w.add(mpb);
 9 
10         Thread t = new Thread(mpb);
11         t.start();
12 
13         w.setVisible(true);
14 
15     }
16 }
17 
18 class MyPanelBall extends Panel implements Runnable{
19     int x=0,y=0,flag=0;
20     public void paint(Graphics g){
21         g.setColor(Color.red);
22         g.fillOval(x,y,10,10);
23     }
24     public void run(){
25         while(true){
26             switch(flag){
27                 case 0: x++;y++;break;
28                 case 1: x++;y--;break;
29                 case 2: x--;y--;break;
30         case 3: x--;y++;
31             }
32         if(y>=300){
33             if(x>=300){
34                 flag=1;
35             }
36 
37         }
38             if(x>=290&&x<=390&&y>=290){
39                 flag=1;
40             }
41             if(x>=390&&y>=190){
42                 flag=2;
43             }
44             if(y<=1&&x>=200&&x<=390){
45                 flag=3;
46             }
47             if(y<=290&&x<=1){
48                 flag=0;
49             }
50             System.out.println(flag);
51             System.out.println("x:"+x);
52             System.out.println("y:"+y);
53             try{
54                 Thread.sleep(10);
55             }catch(Exception e){}
56             repaint();
57         }
58     }
59 }

 还是没能实现小球绕着窗口四围反复运动,最大的问题是:会出现小球消失在可视窗口的情况。。

标签:case,1.5,mpb,10,王洋,小球,++,flag,public
From: https://www.cnblogs.com/shannonredeemed/p/17898930.html

相关文章

  • 车灯LED光源驱动全亮半亮爆闪大电流1.5A
    产品描述AP2402是一款PWM工作模式,高效率、外围简单、内置功率管,适用于5-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达15W,最大电流1.5A。AP2402可实现三段功能切换,通过MODE1/2/3切换三种功能模式:全亮,半亮,爆闪,AP2402工作频率固定在150KHZ左右,同时内置抖频......
  • 制作一个跳跃的小球游戏
    #-*-coding:utf-8-*-"""CreatedonWedDec1310:48:222023@author:86135"""importsysimportpygamepygame.init()size=width,height=640,480screen=pygame.display.set_mode(size)color=(0,......
  • 做一个小游戏,跳跃的小球
    以下为代码:#-*-coding:utf-8-*-importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=800,700#设置窗口screen=pygame.display.set_mode(size)#显示窗口color=(0,0,0)#设置颜......
  • 跳跃小球游戏
    importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=640,480#设置窗口screen=pygame.display.set_mode(size)#显示窗口color=(0,0,0)#设置颜色ball=pygame.image.load(r"C:\Users\xxxtentacion\Des......
  • 记三次升级 TiDB 集群到 v6.1.5 遇到的案例分析过程&升级收益
    作者:Yifei_Jia团队升级TiDB版本的事情是规划很久了,迟迟没操作还是因为很多预期意外的问题是否有能力覆盖解决。本文写的时间是8月底,今天刚好总结的时候看到了分享给大家以作为版本升级的参考。我们的业务集群TiDB数据量本身是很大,单集群数十TB规模,加之业务的重要性,本着非必要不升......
  • 11.5
    今日学习内容<%--CreatedbyIntelliJIDEA.TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>管理员</titl......
  • 跟着王洋老师学编程 - 1.4 飞行的小球
    一、我的思路画一个窗体,并设定大小准备一个画布,并将画布添加至窗体在画布上用paint方法实现小球的运动—— 用一个for循环,小球x轴不变,先画一个球,然后改变画笔颜色与背景色相同,在原位置上再画一个小球;改变小球Y轴坐标,改变画笔颜色,在新的位置重新画小球,循环直到Y轴坐标达到窗......
  • 1.5万字 + 25张图盘点RocketMQ 11种消息类型,你知道几种?
    大家好,我是三友~~故事的开头是这样的最近有个兄弟私信了我一张截图我一看截图内容,好家伙,原来是我一年多前立的flag倒不是我忘了这件事,我后来也的确写了一篇的关于RocketMQ运行的原理的文章只不过这篇文章是从上帝的视角去看待RocektMQ一条消息整个生命周期的过程所以就没有......
  • 豪掷1.5亿!网飞拍摄儿童版《盗梦空间》
    作者:独木桥电影是造梦的艺术。梦,也是电影钟爱的题材。近年来,关于梦境题材的影片佳作不断,《红辣椒》《盗梦空间》《穆赫兰道》等一系列烧脑神作,让无数影迷奉之为经典。(《盗梦空间》)去年,Netflix再次投资梦境,斥资1.5亿美元,打造冒险奇幻电影《梦乡》。影片由弗朗西斯·劳伦斯(《......
  • 跟着王洋老师学编程 - 1.3 满天星星
    编写程序,以窗体形式实现“满天星星”代码一1importjava.awt.Frame;2importjava.awt.Color;3importjava.awt.Panel;4importjava.awt.Graphics;5publicclassStarSky{6publicstaticvoidmain(String[]args){7Framew=newFrame();8......