仿彩虹城堡使用Java绘制游戏地图

本文介绍了作者使用Java Swing实现游戏地图的绘制过程,包括两个版本的实现方式:初版使用JLabel但未能成功,最终版通过绘画方式实现,采用二维数组存储地图数据,允许调整行列显示数量。虽然图片大小为60x60,但未测试自动缩放功能。目前该实现没有发现BUG,展示了部分效果图。
摘要由CSDN通过智能技术生成

很早以前的一个想法,今天终于实现了。此次做了2个版本:

1、第一个版本使用的很多Jlabel做的,数据都是写死的。并且失败了。

2、使用绘画做的,可以更改数据,成功实现。地图使用的二维数组存储,可以更改每行和每列的显示数量,但是我使用的图片是60x60的,不知道会不会自动缩放。目前没遇到BUG。

 

先上段效果图:

package com.maps;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

/**
 * 绘画Java手游地图<br>
 * 下方未对地图长度作判断,使用的数组下标都是[0]开始<br>
 * 所以只要maps的长度大于[0][0]即可
 * 
 * @author iu_chang
 *
 */
public class Map extends JFrame {
	private static final long serialVersionUID = 1L;
	/**
	 * 20x20 地图:<br>
	 * 1为普通路段:灰色<br>
	 * 2为草地:浅绿<br>
	 * 3为桥:棕色<br>
	 * 4为河流:蓝色<br>
	 * 5为墙壁:白色<br>
	 * 6为树木:深绿<br>
	 * 1、2、3可通过,4、5、6不可通过
	 * 
	 */
	private Integer[][] maps = { { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 },
			{ 5, 2, 2, 2, 2, 2, 2, 5, 5, 4, 2, 2, 2, 2, 5, 2, 
以下是一个简单的 Java 彩虹雨小游戏代码示例: ```java import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; public class RainbowGame extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private static final int WIDTH = 400; private static final int HEIGHT = 400; private static final int DELAY = 50; private static final int FONT_SIZE = 30; private static final String[] COLORS = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"}; private static final Random rand = new Random(); private Timer timer; private JLabel textLabel; private Color currentColor; public RainbowGame() { super("Rainbow Game"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(WIDTH, HEIGHT); setResizable(false); setLocationRelativeTo(null); setLayout(new BorderLayout()); textLabel = new JLabel("Press the space bar to start.", JLabel.CENTER); textLabel.setFont(new Font("Arial", Font.BOLD, FONT_SIZE)); add(textLabel, BorderLayout.CENTER); timer = new Timer(DELAY, this); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == timer) { currentColor = getRandomColor(); textLabel.setForeground(currentColor); } } private Color getRandomColor() { int index = rand.nextInt(COLORS.length); switch (COLORS[index]) { case "red": return Color.RED; case "orange": return Color.ORANGE; case "yellow": return Color.YELLOW; case "green": return Color.GREEN; case "blue": return Color.BLUE; case "indigo": return new Color(75, 0, 130); // dark blue case "violet": return new Color(148, 0, 211); // dark violet default: return Color.BLACK; } } private void startGame() { textLabel.setText("Rainbow Game!"); textLabel.setForeground(Color.BLACK); timer.start(); } private void endGame() { timer.stop(); textLabel.setText("Game over."); textLabel.setForeground(Color.BLACK); } public static void main(String[] args) { RainbowGame game = new RainbowGame(); game.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (game.timer.isRunning()) { game.endGame(); } else { game.startGame(); } } } }); } } ``` 这个小游戏的规则很简单:按下空格键开始游戏,每隔一段时间,文字颜色会随机变化,直到用户再次按下空格键结束游戏
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值