1:
package 三国战纪;
//设置框架
import javax.imageio.ImageIO;
import javax.swing.*;
import java.io.IOException;
public class GameFrame extends JFrame {
public GameFrame(){
setTitle("三国游戏"); //设置标题
setSize(1024,480);//设置弹出窗口尺寸
setLocationRelativeTo(null); //Location位置,RelativeTo相对于
//set设置;Default默认值;Close关闭文件;Operation运算;JFrame窗体;EXIT离开;CLOSE结束
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体时关闭游戏
//设置标题
try {
//IconImage图标;read读取;Resource资源类型;GameFrame游戏窗口
setIconImage(ImageIO.read(GameFrame.class.getResource("")));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
GameFrame frame = new GameFrame(); //frame框架
GamePanel panel = new GamePanel(frame);//panel画板
panel.action(); //调用开始游戏的方法
frame.add(panel); //添加一个画板;add添加
frame.setVisible(true); //显示窗体;Visible 可见的
}
}
2:
package 三国战纪;
//获取图片
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
//读取图片的工具类
public class ImageUtil {
//BufferedImage图像缓冲区;get获取;Img图片;path路径
public static BufferedImage getImg(String path){
//加载图片; try尝试; ImageIO:io流;read读取
try {
//尝试用地址找图片
BufferedImage img = ImageIO.read(ImageUtil.class.getResource(path));
return img;
//catch抓住;IOException异常
} catch (IOException e) {
//输出找不到的原因
e.printStackTrace();
}
return null;
}
}
3:
package 三国战纪;
//人物 吕布
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
public class Herolb {
BufferedImage lbImg;//显示LvBu图片
int x;
int y;
int w;
int h;
//lvbu动作
List list1,list2,list3,list4;
//lvbu向后移动
int dir;//=0向左; =1向右;=2向上;=3向下;=4向左上 =5向左上;=6向右上;=7向右下
public Herolb(){
//读取LvBu的图片
lbImg = ImageUtil.getImg("/img/吕布L1.png");
//设置游戏开始的初始值,即显示LvBu初始位置
x = 600;
y = 200;
//显示人物的外形大小
w = lbImg.getWidth();
h = lbImg.getHeight();
dir = 0;
list1 = new ArrayList <BufferedImage>();
for (int i = 1; i<=7;i++){
list1.add(ImageUtil.getImg("/img/吕布L"+i+".png"));
}
list2 = new ArrayList <BufferedImage>();
for (int i = 1; i<=8;i++){
list2.add(ImageUtil.getImg("/img/吕布"+i+".png"));
}
list3 = new ArrayList <BufferedImage>();
for (int i = 1; i<=5;i++){
list3.add(ImageUtil.getImg("/img/a1-L"+i+".png"));
}
list4 = new ArrayList <BufferedImage>();
for (int i = 1; i<=5;i++){
list4.add(ImageUtil.getImg("/img/a1-R"+i+".png"));
}
}
int index = 1;//index索引
//lvbu动起来:Change变换
// 吕布向前动起来
public void LbChange1(){
if(index>=7){
index = 1;
}
lbImg = list1.get(index);
index++;
}
// 吕布向后动起来
public void LbChange2(){
if (index>=8){
index = 1;
}
lbImg = list2.get(index);
index++;
}
//// 吕布向前攻击
public void LbChange3(){
if (index>=5){
index = 0;
}
lbImg = list3.get(index);
index++;
}
// 吕布向后攻击
public void LbChange4(){
if (index>=5){
index = 0;
}
lbImg = list4.get(index);
index++;
}
//吕布攻击赵云;Attack攻击
public void AttackZy(Herozy zhaoyun){
if (x - zhaoyun.x +w <= zhaoyun.w +w ||zhaoyun.x -x +zhaoyun.w <= zhaoyun.w+w
||zhaoyun.x>=x && zhaoyun.x <= x +w ){
//最大值ZhaoYun.w+w;
//最小值w
new Herozy().x -= 20;
System.out.println("1");
}
}
}
4:人物赵云
package 三国战纪;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
public class Herozy {
BufferedImage bg;
int x;
int y;
int w;
int h;
int dir;
//
List<BufferedImage> list1,list2;
////赵云活动起来
public Herozy(){
bg = ImageUtil.getImg("/img/right-0.png");
x = 300;
y = 200;
w = bg.getWidth();
h = bg.getHeight();
dir = 0;
list1 = new ArrayList<BufferedImage>();
for (int i = 0;i<8;i++){
list1.add(ImageUtil.getImg("/img/right-"+i+".png"));
}
list2 = new ArrayList<BufferedImage>();
for (int i = 0;i<8;i++){
list2.add(ImageUtil.getImg("/img/left-"+i+".png"));
}
}
//赵云向前移动 ;Change position改变位置
int index = 0;
public void ZyChangeposition1(){
if(index==7){
index = 0;
}
bg= list1.get(index);
index++;
}
// 赵云向h后移动
public void ZyChangeposition2(){
if (index==7){
index = 0;
}
bg= list2.get(index);
index++;
}
}
5:
package 三国战纪;
//调用图片及人物
import javax.swing.;
import java.awt.;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.Random;
//游戏的界面
public class GamePanel extends JPanel{
//(1)定义背景图片
BufferedImage bg;
//BufferedImage mnImg;//定义mn(MeiNv)图片
//调用模具 制作LvBu
Herolb lb = new Herolb();
Herozy zy = new Herozy();
//窗体
GameFrame gf;
//Random r = new Random();
//构造方法
public GamePanel(GameFrame gameframe){
this.gf = gameframe;
//(2):调用读取图片的工具
//声明一个用于防背景的窗体
BufferedImage img;
//读取图片
bg = ImageUtil.getImg("/img/bg1.jpg");
//mnImg = ImageUtil.getImg("/img/吕布L1.png");
//1:设置背景;Background背景;Color颜色;green绿色
//setBackground(Color.green);
KeyListener();
}
//专门用来画图的方法,Paint画图;画图代码paint+回车键
//(Graphics g)就是画笔
@Override
public void paint(Graphics g) {
super.paint(g);
/*
//学习基本操作
//2:设置画笔的Color颜色
g.setColor(Color.red);
//3:设置字体 数字越大字越大
g.setFont(new Font(“楷体”, Font.BOLD,50));
//4:设置文字位置 g.drawString(str,x,y);draw画画
g.drawString(“大家好”,50,50);
//5:画图形
//画空心矩形 ;draw绘制;Rect矩形;x,y矩形左上角起始点位置,width长;height高
g.drawRect(60,60,100,20);
//画实心矩形;fill装满
g.fillRect(60,100,100,20);
//画空心椭圆
g.drawOval(60,150,80,60);
//画实心圆
g.setColor(Color.BLACK);
g.fillOval(60,220,80,80);
//画一个五角星 五角星形状可以在中文输入里面找
g.setColor(Color.red);
g.setFont(new Font(“楷体”, Font.BOLD,100));
g.drawString(“★”,50,400);
*/
//画背景图
g.drawImage(bg,0,0,null);
//bg导入图片,x横坐标,y坐标,宽,高.因为不需要画板直接在面板上做所以用null
//g.drawImage(bg,0,0,1024,480,null);
//画图;
//g.drawImage(mnImg,600,200,243,131,null);
//如果不设置图像的宽和高,系统就会默认原图的大小
//g.drawImage(mnImg,400,150,null);
//加载LvBu后
g.setColor(Color.red);
g.fillRect(100,0,350,30);
g.fillRect(617,0,350,30);
g.setColor(Color.blue);
g.fillRect(100,32,350,15);
g.fillRect(617,32,350,15);
g.drawImage(ImageUtil.getImg("/img/lvbu.png"),970,2,90,45,null);
g.drawImage(ImageUtil.getImg("/img/zy.png"),3,2,90,45,null);
g.setColor(Color.yellow);
g.setFont(new Font("宋体",Font.BOLD,50));
g.drawString("VS",505,58);
//画出吕布
g.drawImage(lb.lbImg,lb.x,lb.y,lb.w,lb.h,null);
//画出赵云
g.drawImage(zy.bg,zy.x,zy.y,zy.w,zy.h,null);
}
//KeyListener键盘监听器;即用键盘控制人物移动
public void KeyListener(){
//键盘控制编程步骤:1:创建键盘适配器即键盘的接口
KeyAdapter adapter = new KeyAdapter() {
//keyPressed按下键盘;下面就是监听键盘执行的操作;KeyEvent键盘事件
@Override
public void keyPressed(KeyEvent e) {
//当按下键盘按键时会执行的代码;char字符类型;
char c = e.getKeyChar();
zy.ZyChangeposition1();
// int key=e.getKeyCode(); if (key==KeyEvent.VK_UP) { 键盘向上移动
if (c=='a'){
//向左移动
zy.x-=3;
zy.ZyChangeposition2();
if (zy.x<=0){
zy.x=0;
//zy.dir = 'd';
}
}else if (c=='d'){
//向右移动
zy.x+=3;
//设置人物边界
if(zy.x>=1024-zy.w){
zy.x=1024-zy.w;
// zy.dir = 'a';
}
}else if(c=='w'){
//向上移动
zy.y-=3;
if (zy.y<=0){
zy.y=0;
// zy.dir = 'x';
}
}else if(c=='x'){
//向下移动
zy.y +=3;
if (zy.y>=480-zy.h){
zy.y=480-zy.h;
//zy.dir = 'w';
}
}
// repaint刷新
repaint();
}
};
//2:将键盘适配器加入到监听器;add添加;
gf.addKeyListener(adapter);
}
//开始游戏的方法;action动作
public void action() {
//创建并启动线程 控制lvbu移动;线程的固定格式;new Thread(){ public void run(){//需要线程做什么事情,就写在在run方法里面}}.start();
new Thread() {
public void run() {//run运动
//吕布移动知道循环次数用for ,不知道用while
while (true) {
lb.LbChange1();//Change 变化
//声明一个随机数对象
Random random = new Random();//Random随机
lb.dir = random.nextInt(9 + 1);//bound边界
if (lb.dir == 0) {
lb.x -= 3;
if (lb.x <= 0) {
lb.x = 0;
//lb,dir = 1;
}
} else if (lb.dir == 1) {
lb.LbChange2();
lb.x += 3;
if (lb.x >= 1024 - lb.w) {
lb.x = 1024 - lb.w;
//lb.dir = 0;
}
} else if (lb.dir == 2) {
lb.y -= 3;
if (lb.y <= 0) {
lb.y = 0;
}
} else if (lb.dir == 3) {
lb.y += 3;
if (lb.y >= 480 - lb.h) {
lb.y = 480 - lb.h;
}
//4左上
} else if (lb.dir == 4) {
lb.x -= 3;
lb.y -= 3;
//5左下
} else if (lb.dir == 5) {
lb.x -= 3;
lb.y += 3;
//6右上
} else if (lb.dir == 6) {
lb.x += 3;
lb.y -= 3;
//7右下
} else if (lb.dir == 7) {
lb.x += 3;
lb.y += 3;
} else if (lb.dir == 8) {
lb.LbChange3();
} else if (lb.dir == 9) {
lb.LbChange4();
}
//线程休眠
try {
Thread.sleep(100);
//重新调用paint方法,将lvbu刷新到新的位置;repaint重画
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}