飞机大战之-生成窗口

首先新建一个项目起名为飞机大战 - > 然后在该项目下新建一个视图的包 - > 在视图的包下新建一个生成窗口的类,起名为BaseFrame。

我们的BaseFrame是继承于JFrame的一个子类。
所以代码如下:

import javax.swing.JFrame;
public class BaseFrame extends JFrame{
}

由于我们要使用JFrame,所以我们需要导入javax.swing.Jframe这个包。

既然我们想生产一个窗口,那么为了代码的可读性,我们新建两个窗口宽和高的静态常量。

package view;

import javax.swing.JFrame;

public class BaseFrame extends JFrame{

	public static int frameWidth = 512, 
					  frameHeight = 768;
}

然后我们用setBounds把这个窗口放在100,0的位置
setBounds()接收四个int参数,前两个坐标,后两个是宽和高

package view;

import javax.swing.JFrame;

public class BaseFrame extends JFrame{

	public static int frameWidth = 512, 
					  frameHeight = 768;
	
	
	public BaseFrame()
	{
		super("飞机大战");
		setBounds(100, 0, frameWidth, frameHeight);
	}
}

java中新建的窗口默认不显示, 我们还需要一条语句,
setVisible(true);

package view;

import javax.swing.JFrame;

public class BaseFrame extends JFrame{

	public static int frameWidth = 512, 
					  frameHeight = 768;
	
	public BaseFrame()
	{
		super("飞机大战");
		setBounds(100, 0, frameWidth, frameHeight);
		setVisible(true);
	}
}

还有一个小知识点,我们还需要修改页面布局,否则我们以后添加飞机都按默认布局添加了。
setLayout(null); 设置布局为空。
我们以后添加什么组件,就可以用,setBounds();来控制组件的位置了。

package view;

import javax.swing.JFrame;

public class BaseFrame extends JFrame{

	public static int frameWidth = 512, 
					  frameHeight = 768;
	
	
	public BaseFrame()
	{
		super("飞机大战");
		setBounds(100, 0, frameWidth, frameHeight);
		
		setLayout(null);
		
		setVisible(true);
	}
	
	
}

然后我们在view包中在新建一个Main类,Main类是我们程序的入口,现在我们在Main方法中添加一个我们的窗口。

package view;

public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		new BaseFrame();
	}

}

点击运行,成功弹出了一个灰灰的窗口。

还有一点要完善的就是我们的窗口得关闭哇,不然打开点击关闭没反应。(实际上没这条语句也有反应。这里我觉得可能是系统自动给我添加了)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

package view;

import javax.swing.JFrame;

public class BaseFrame extends JFrame{

	public static int frameWidth = 512, 
					  frameHeight = 768;
	
	
	public BaseFrame()
	{
		super("飞机大战");
		setBounds(100, 0, frameWidth, frameHeight);
		
		setLayout(null);
		
		setVisible(true);
	}
	
	
}

附加:
如果我们想控制窗口在屏幕中的位置,直接输入坐标不是一个好的选择。我们可以结合窗口宽高的常量和一个函数,这个函数可以返回我们窗口大小

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

然后我们利用自己定义的常量窗口宽高,和screenSize来调整窗口的位置。

明天在写添加背景动画吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的飞机大战Python代码示例,你可以在此基础上进行修改和扩展: ```python import pygame import random # 初始化pygame pygame.init() # 设置游戏窗口大小和标题 WINDOW_WIDTH = 480 WINDOW_HEIGHT = 800 WINDOW_TITLE = '飞机大战' screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption(WINDOW_TITLE) # 加载背景和飞机图片 bg_img = pygame.image.load('images/bg.jpg') player_img = pygame.image.load('images/player.png') enemy_img = pygame.image.load('images/enemy.png') bullet_img = pygame.image.load('images/bullet.png') # 设置游戏时钟和帧率 clock = pygame.time.Clock() FPS = 60 # 飞机类 class Plane(pygame.sprite.Sprite): def __init__(self, img, x, y, speed): super().__init__() self.image = img self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.speed = speed def update(self): self.rect.y += self.speed # 玩家类 class Player(Plane): def __init__(self, img, x, y, speed): super().__init__(img, x, y, speed) self.bullets = pygame.sprite.Group() def update(self): keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: self.rect.x -= self.speed if keys[pygame.K_RIGHT]: self.rect.x += self.speed if keys[pygame.K_SPACE]: bullet = Bullet(bullet_img, self.rect.centerx, self.rect.top) self.bullets.add(bullet) # 敌机类 class Enemy(Plane): def __init__(self, img, x, y, speed): super().__init__(img, x, y, speed) # 子弹类 class Bullet(pygame.sprite.Sprite): def __init__(self, img, x, y): super().__init__() self.image = img self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y self.speed = -10 def update(self): self.rect.y += self.speed if self.rect.bottom < 0: self.kill() # 创建玩家和敌机精灵组 player = Player(player_img, WINDOW_WIDTH // 2, WINDOW_HEIGHT - 100, 5) enemies = pygame.sprite.Group() # 游戏主循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 更新玩家和敌机 player.update() enemies.update() # 添加新的敌机 if random.randint(1, 60) == 1: enemy = Enemy(enemy_img, random.randint(0, WINDOW_WIDTH - 50), -50, random.randint(1, 5)) enemies.add(enemy) # 检测玩家和敌机是否碰撞 if pygame.sprite.spritecollide(player, enemies, False): pygame.quit() exit() # 检测子弹和敌机是否碰撞 for bullet in player.bullets: if pygame.sprite.spritecollide(bullet, enemies, True): bullet.kill() # 绘制游戏界面 screen.blit(bg_img, (0, 0)) screen.blit(player.image, player.rect) player.bullets.draw(screen) enemies.draw(screen) # 更新游戏界面 pygame.display.update() # 控制游戏帧率 clock.tick(FPS) ``` 在运行该代码之前,需要先准备好游戏需要用到的图片素材,并将其放置在代码中对应的路径下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘璐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值