会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132832个问题

GameObject.类

package cn.qym.game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;

public class GameObject {
	Image img;
	double x,y;
	int speed;
	int width,height;
	public void drawSelf(Graphics g) {
		g.drawImage(img, (int)x, (int)y, null);
	}
	public GameObject(Image img, double x, double y, int speed, int weight, int height) {
		super();
		this.img = img;
		this.x = x;
		this.y = y;
		this.speed = speed;
		this.width = width;
		this.height = height;
	}
	public GameObject(Image img, double x, double y, int speed) {
		super();
		this.img = img;
		this.x = x;
		this.y = y;
		this.speed = speed;
	}
	public GameObject(){
		
	}
	/*
	 *返回物体所在矩形,便于后续碰撞检测 
	 */
	public Rectangle getRect(){
		return  new Rectangle((int)x, (int)y, width, height);
	}
	
}
GameUtil类
package cn.qym.game;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;




public class GameUtil {
	private GameUtil() {
		
	}
	public static Image getImage(String path) {
		BufferedImage bi =null;
		try {
	 URL u=GameUtil.class.getClassLoader().getResource(path);
			bi=ImageIO.read(u);
		}	catch(IOException e) {
			e.printStackTrace();
		}
		return bi;
	}
}
MyGameFrame类
package cn.qym.game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
public class MyGameFrame extends JFrame {
	Image bg =GameUtil.getImage("images/bg.jpg");
	Image planeImg=GameUtil.getImage("images/plane.png");
	Plane plane =new Plane(planeImg,250,250);
	public void paint(Graphics g) {
		g.drawImage(bg, 0, 0, null);
		plane.drawSelf(g);
		
	}
		class PaintThread extends Thread{
		
	}
		public void run() {
			while (true) {
				repaint();
			try {
				Thread.sleep(40);
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
			}
		}
		
		class KeyMonitor extends KeyAdapter{
			public void keyPressed(KeyEvent e) {
				plane.addDirection(e);
			}
			public void keyReleased(KeyEvent e) {
				plane.minusDirection(e);
				
			}
			
		}
	public void launchFrame() {
		this.setTitle("钱宇明作品");
		this.setVisible(true);
		this.setLocation(300, 300);
		 this.setSize(500, 500);
		 this.addWindowListener(new WindowAdapter() {
			  @Override
			public void windowClosing(WindowEvent e) {
				  System.exit(0);
			}
		});
		 
		  new PaintThread().start();
		  addKeyListener(new KeyMonitor());
	}
	
	public static void main(String[]args) {
		MyGameFrame f =new MyGameFrame();
		f.launchFrame();
		
	}
}
Plane类
package cn.qym.game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;

public class Plane extends GameObject {
	boolean left,up,right,down;
	int speed =3;
	public void drawSelf(Graphics g) {
		g.drawImage(img, (int)x, (int)y, null);
		if(left) {
			x-=speed;
		}if(right) {
			x+=speed;
		}if(up) {
			y-=speed;
		}if(down) {
			y+=speed;
		}
	}
	public Plane(Image img,double x,double y) {
		this.img=img;
		this.x=x;
		this.y=y;
	}
	public void addDirection(KeyEvent e) {
	switch(e.getKeyCode()) {
	case KeyEvent.VK_LEFT:
		left = true;
		break;
	case KeyEvent.VK_UP:
		up=true;
		break;
	case KeyEvent.VK_RIGHT:
		right=true;
		break;
	case KeyEvent.VK_DOWN:
		down=true;
		break;
	}
	}
	public void minusDirection(KeyEvent e) {
		switch(e.getKeyCode()) {
		case KeyEvent.VK_LEFT:
			left = false;
			break;
		case KeyEvent.VK_UP:
			up=false;
			break;
		case KeyEvent.VK_RIGHT:
			right=false;
			break;
		case KeyEvent.VK_DOWN:
			down=false;
			break;
	}
}
}

全都定义好了,完全按着视频来的,为什么我按上下左右实现不了飞机的移动。

JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3196楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3199楼

package com.sxt.plane.practice;

import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class GamePlanrSecond extends JFrame {

    @Override
    public void paint(Graphics g) {
        //super.paint(g);
        g.drawLine(100, 100, 300, 300);
    }

    /**
     *  初始化窗口
     */
    public void launchFrame() {
        // 游戏窗口标题
        this.setTitle("飞机小游戏-个人练习");
        // 设置位置和大小
        this.setSize(500, 500);
        this.setLocation(200, 200);
        // 窗口可见
        this.setVisible(true);
        // 增加关闭窗口的监听的匿名内部类
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }


    // main方法:程序入口
    public static void main(String[] args) {
        GamePlanrSecond gamePlanrSecond = new GamePlanrSecond();
        gamePlanrSecond.launchFrame();
    }
}


老师,我的刚开始,也是像同学们说的那样是黑色背景,加载不出来画的内容,按照您提出的方法,修改之后也没其效果,我后面吧代码删了重新敲了一边,就正常了,不加super(g); 也能正常显示,这是为什么啊?


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3200楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 3201楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3203楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3204楼

package cn.qym.game;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Paint;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;


public class MyGame01 extends JFrame{
	
	public void Paint(Graphics g) { //paint 为画笔工具,自动被调用,g相当于一支画笔
	  		Color c =g.getColor();//储存原来得颜色
	  		Font f =g.getFont();//储存原来得字体
	  		g.setColor(Color.BLUE);//改变颜色
	  		g.drawLine(100, 100, 300, 300);//画线
	  		g.drawRect(100, 100, 300, 300);//画矩形
	  		g.drawOval(100, 100, 300, 300);//画椭圆
	  		g.fillRect(100, 100, 200, 200);//填充一个矩形实心
	  		g.drawString("我是谁", 100, 200);//填写字符串
	  		g.setColor(c);//恢复原来得颜色
	  		g.setFont(f);//恢复原来得字体
}
	  public void lauchFrame(){
		  this.setSize(500, 500);//窗口大小
		  this.setTitle("钱宇明作品");//窗口名称
		  this.setVisible(true);//显示窗口
		  this.setLocation(300, 300);//窗口位置 左上角坐标
/*
 * 设置窗口关闭即程序停止		  
 */
		  this.addWindowListener(new WindowAdapter() {
			  @Override
			public void windowClosing(WindowEvent e) {
				  System.exit(0);
			}
		});
		  
	  }
	  public static void main(String[]args) {
	  MyGame01 f = new MyGame01();
	  f.lauchFrame();
	  

  }
  		
}

为什么我运行后画笔没有显示呢?画的直线、圆一个都没。。1.png

JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3205楼

import java.util.Scanner;
public class ssq {
  public static void main(String[]args) {
	
	  System.out.println("******欢迎进入双色球彩票系统*****");
	  System.out.println("1、购买彩票");
	  System.out.println("2、查看开奖");
	  System.out.println("3、退出");
	  System.out.println("************");
	  System.out.println("请选择菜单:");
	  Scanner Scanner = new Scanner(System.in);
	  do {
	  int choice = Scanner.nextInt();
	  int price = 2;
	  int count = 0;
	  int totalMoney = 0;
	  boolean isBuy=false;
	  int[]num=null; 	  
	  switch(choice) {
	  case 1:
		  System.out.println("购买彩票");
		  System.out.println("需要买多少注");
		  count =Scanner.nextInt();	  
		  totalMoney =count*price;
		  num =new int[7];
		  for(int i=0;i<num.length;i++) {
			  int red;
			  int bule;
			  if(i<num.length-1) {
				  System.out.println("请选择6个红色球,第"+(i+1)+"个球号为:");
				  red =Scanner.nextInt();
				  num[i]=red;
			  }else {
				  System.out.println("请选择蓝色球:");
				  bule=Scanner.nextInt();
				  num[i]=bule;
			  }  
			  }
		  		System.out.println("您一共买了"+(count)+"注,共支付"+(totalMoney)+"元,所选号码为:");
		  		for(int m:num) {
				  System.out.print(m+"\t");
		  		}
			     System.out.println();
			     isBuy=true;
			     break;
	  	case 2:
			  System.out.println("查看抽奖");
			  if(isBuy) {
				 isBuy=false;
				  System.out.println("已买的彩票为:");
				  for(int m:num) {
					  System.out.print(m+"\t");
				  }
				  System.out.println("当期中间号码为:");
				  int[]luckNum= {1,15,14,12,17,8,9};
				  for(int h:luckNum) {
					  System.out.print(h+"\t");
					  int result = getCompareResult(num,luckNum);
					  if(result==1) {
						  System.out.println("一等奖,恭喜您!!共下了"+(count)+"注,投资"+(totalMoney)+",获奖"+(500*count)+"");
					  }else if(result==2) {
						  System.out.println("二等奖,恭喜您!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(400*count)+"");
					  }else if(result==3) {
						  System.out.println("三等奖,恭喜您!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(300*count)+"");
					  }else if(result==4) {
						  System.out.println("四等奖,恭喜您!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(200*count)+"");
					  }else if(result==5) {
						  System.out.println("五等奖,恭喜您!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(100*count)+"");
					  }else if(result==6) {
						  System.out.println("六等奖,恭喜您!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(10*count)+""); 
					  }else {
						  System.out.println("没有中奖!!共下了"+(count)+",投资"+(totalMoney)+",获奖"+(0*count)+"");
					  }
				  }
			  }
			    else {
			    	System.out.println("请购买彩票,再查看开奖情况");
			    }
			  break;
	  	case 3 :
	  		System.out.println("谢谢使用");
	  		break;
	  	default:
	  		System.out.println("输入错误");
	  		break;
		  }
  } while (true);
	  
	  }
  private static int getCompareResult(int[] num, int[] lucknum) {
		return 0;

}
  }

	

为什么我买好彩票后,选择2 查看兑奖情况,只显示请购买彩票,再查看开奖情况

JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 3208楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3209楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3210楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637