Java项目:潜艇大战项目(java+swing)
源码获取:博客首页 "资源" 里下载!
功能简介:
Java swing实现的一款小游戏潜艇大战的项目源码
游戏界面:
@SuppressWarnings({ "unused", "serial" })
public class GameGUI extends JPanel {//卡片布局器private CardLayout cardLayout = new CardLayout();//进度条面板 private ProgressPanel progressPanel; //菜单面板private MainMenuPanel menuPanel;//游戏面板private GamePanel gamePanel;//需要updateprivate Abstractpanel currentPanel;//单人游戏面板private SingleGamePanel singleGamePanel;//多人能游戏面板private MutilPlayerPanel mutilPlayerPanel;NewGamePanel newGamePanel;NetWorkManager netWorkManager;GridMapRender mapRender;JFrame frame;public GameGUI(JFrame frame) {this.frame = frame;setLayout(cardLayout);getBorder();frame.getContentPane().add(this);setSize(frame.getWidth(), frame.getHeight());//这里有个次序,最先加入的显示currentPanel = menuPanel = new MainMenuPanel(this, "mainMenu");progressPanel = new ProgressPanel(this, "progress");gamePanel = new GamePanel(this, "game");singleGamePanel = new SingleGamePanel(this,"singleGame");mutilPlayerPanel = new MutilPlayerPanel(this,"mutilGame");newGamePanel = new NewGamePanel(this,"newGame");}public void switchProgress(final int type,final List<Integer> types) {cardLayout.show(this, "progress");currentPanel = progressPanel;Thread t = new Thread(){public void run(){mapRender = ResourceManager.load(type,types);mapRender.setNetWorkManager(netWorkManager);}};t.start();}public void switchGame() {gamePanel.init();cardLayout.show(this, "game");currentPanel = gamePanel;}public void switchSingleGame() {cardLayout.show(this, "singleGame");singleGamePanel.reset();currentPanel = singleGamePanel;}public void switchMutilGame() {cardLayout.show(this, "mutilGame");mutilPlayerPanel.reset();currentPanel = mutilPlayerPanel;}public void switchMainMenu() {cardLayout.show(this, "mainMenu");menuPanel.reset();currentPanel = menuPanel;}public void switchNewGame() {cardLayout.show(this, "newGame");newGamePanel.reset();currentPanel = newGamePanel;}public void update(long elapsedTime) {if(currentPanel!=null){currentPanel.update(elapsedTime);}}
}
游戏界面:
/*** 游戏界面*/
public class GamePanel extends Abstractpanel{GridMap gridmap;GridMapRender gridMapRender;Control control;ConsolePanel controlPanel;Robot robot; public void init(){initControl();gridmap = ResourceManager.resourceManager.getGridMap();gridMapRender = gridmap.getTileMapRender();gridMapRender.screenWidth = getWidth();gridMapRender.screenHeight = getHeight();controlPanel = new ConsolePanel(gridMapRender);controlPanel.setLocation(getWidth() - controlPanel.getWidth(), 0);add(controlPanel);try {robot = new Robot();} catch (AWTException e) {e.printStackTrace();}gridMapRender.addMsg("娓╅Θ鎻愮ず锛氭寜鏁板瓧閿�閫変腑鎵�湁鍐滄皯");gridMapRender.addMsg("娓╅Θ鎻愮ず锛氭寜鏁板瓧閿�閫変腑鎵�湁鏈烘灙鍏�");}private void initControl(){GameGUI gui = (GameGUI) this.getParent();control = new Control(this, gui.frame);control.addKeyPressListener(new KeyPressListener(){public void press(int keyCode) {if(keyCode==KeyEvent.VK_1){gridMapRender.blur();for(Tile tile:gridmap.getTiles()){boolean isScv = (tile.getType()==gridMapRender.getCurrentType())&&(tile instanceof Scv);if(isScv){tile.focus();gridMapRender.addFocusSprite((Sprite)tile);}}}else if(keyCode==KeyEvent.VK_2){gridMapRender.blur();for(Tile tile:gridmap.getTiles()){boolean isMarine = tile.getType()==gridMapRender.getCurrentType()&&tile instanceof Marine;if(isMarine){tile.focus();gridMapRender.addFocusSprite((Sprite)tile);}}}}});control.addDragListener(new DragListener(){public void drag(int x, int y, int dx, int dy) {gridMapRender.focus(x, y, dx, dy);}});control.addLeftPressListener(new LeftPressListener(){public void press(int x, int y) {//gridMapRender.focus(x, y);gridMapRender.operate(x, y);}});control.addRightPressListener(new RightPressListener(){public void press(int x, int y) {gridMapRender.move(x, y);}}); control.addMoveListener(new MoveListener(){public void move(int x, int y) {int offsetX = gridMapRender.offsetX;int screenX = getWidth()-GridMapRender.TILE_WIDTH;//濡傛灉榧犳爣浣嶄簬灞忓箷瀹藉害鍓嶄竴涓猅ILE瀹藉害if(x>screenX&&offsetX<GridMapRender.tileXToPx(107)){//鍚戝彸绉诲姩涓�釜tile瀹藉害gridMapRender.offsetX=offsetX+GridMapRender.TILE_WIDTH;robot.mouseMove(screenX, y);++controlPanel.map_panel.x;}//濡傛灉榧犳爣鍦ㄤ竴涓猅ILE瀹藉害if(x<GridMapRender.TILE_WIDTH&&offsetX>0){gridMapRender.offsetX=offsetX-GridMapRender.TILE_WIDTH;robot.mouseMove(GridMapRender.TILE_WIDTH, y);--controlPanel.map_panel.x;}//绾靛潗鏍囧拰姘村钩鍧愭爣閫昏緫鐩稿悓int offsetY = gridMapRender.offsetY;int screenY = getHeight()-GridMapRender.TILE_HEIGHT;if(y>screenY&&offsetY<GridMapRender.tileXToPx(110)){//鍚戝彸绉诲姩涓�釜tile瀹藉害gridMapRender.offsetY=offsetY+GridMapRender.TILE_HEIGHT;robot.mouseMove(x, screenY);++controlPanel.map_panel.y;}if(y<GridMapRender.TILE_HEIGHT&&offsetY>0){gridMapRender.offsetY=offsetY-GridMapRender.TILE_WIDTH;robot.mouseMove(x, GridMapRender.TILE_HEIGHT);--controlPanel.map_panel.y;}gridMapRender.moveX = x;gridMapRender.moveY = y;}});}public GamePanel(GameGUI parent, String name) {super(parent, name);}public void paintComponent(Graphics g) {gridMapRender.draw((Graphics2D)g);//鐢绘帶鍒剁嚎control.drag(g);}public void update(long elapsedTime) {gridMapRender.update(elapsedTime);}
}
新游戏界面:
public class NewGamePanel extends Abstractpanel {LeftPanel leftPanel;RightPanel rightPanel;public NewGamePanel(GameGUI gameGUI, String name) {super(gameGUI, name);leftPanel = new LeftPanel(this);rightPanel = new RightPanel(this);this.add(leftPanel);this.add(rightPanel);}public void paintComponent(Graphics g) {g.drawImage(main, 0, 0, null);}public void update(long elapsedTime) {leftPanel.update(elapsedTime);rightPanel.update(elapsedTime);}public void reset() {leftPanel.elastic.slide(-50, 50);rightPanel.elastic.slide(800, -180);if(gameGUI.netWorkManager instanceof MockNetWorkManager){leftPanel.players.get(0).removeAllElements();leftPanel.players.get(0).addElement("Player");for(int i=1;i<leftPanel.players.size();++i){DefaultComboBoxModel cbm = leftPanel.players.get(i);cbm.setSelectedItem("Computer");}}else{for(int i=1;i<leftPanel.players.size();++i){DefaultComboBoxModel cbm = leftPanel.players.get(i);if(cbm.getSelectedItem().equals("Computer"))cbm.setSelectedItem("Open");}}}class TextPanel extends JPanel {private int x, y = 300;Elastic elastic = new Elastic(-50, 50);Image image = ResourceManager.loadImage("left.png");public TextPanel() {setLayout(null);setSize(400, 270);setLocation(x, y);}public void paintComponent(Graphics g) {g.drawImage(image, 0, 0, null);g.setColor(fillColor);g.fillRect(20, 345, getWidth() - 25, getHeight() - 50);g.setColor(borderColor);g.drawRect(20, 345, getWidth() - 25, getHeight() - 50);}public void update(long elapsedTime) {x = elastic.update(elapsedTime);setLocation(x, y);}}class LeftPanel extends JPanel {private int x, y = 20;Elastic elastic = new Elastic(-50, 50);Image image = ResourceManager.loadImage("left.png");String labels[] = { "Open", "Closed","Computer"};LinkedList<DefaultComboBoxModel> players = new LinkedList<DefaultComboBoxModel>(); String type[] = { "Terran"};JComboBox[][] jcbs = new JComboBox[4][2];public LeftPanel(JPanel parenPanel) {setLayout(null);setSize(400, 270);setLocation(x, y);int location=120;final DefaultComboBoxModel mode1 = new DefaultComboBoxModel(labels);mode1.addListDataListener(new ListDataListener(){public void contentsChanged(ListDataEvent e) {DefaultComboBoxModel model = (DefaultComboBoxModel) e.getSource();Object item = model.getSelectedItem();//System.out.println(item+ ".contentsChanged() 1");if(item.equals("Computer") || item.equals("Open") || item.equals("Closed")){gameGUI.netWorkManager.select(item.toString(), 1);//System.out.println(item);}}public void intervalAdded(ListDataEvent e) {}public void intervalRemoved(ListDataEvent e) {}});final DefaultComboBoxModel mode2 = new DefaultComboBoxModel(labels);mode2.addListDataListener(new ListDataListener(){public void contentsChanged(ListDataEvent e) {String value = mode2.getSelectedItem().toString();if(value.equals("Computer") || value.equals("Open") || value.equals("Closed")){gameGUI.netWorkManager.select(value,2);}}public void intervalAdded(ListDataEvent e) {}public void intervalRemoved(ListDataEvent e) {}});final DefaultComboBoxModel mode3 = new DefaultComboBoxModel(labels);mode3.addListDataListener(new ListDataListener(){public void contentsChanged(ListDataEvent e) {String value = mode3.getSelectedItem().toString();if(value.equals("Computer") || value.equals("Open") || value.equals("Closed")){gameGUI.netWorkManager.select(value,3);}}public void intervalAdded(ListDataEvent e) {}public void intervalRemoved(ListDataEvent e) {}});//如果是SingleGame
// if(gameGUI.netWorkManager instanceof MockNetWorkManager){
// players.add(new DefaultComboBoxModel(new String[]{"Player"}));
// }else{
// players.add(new DefaultComboBoxModel());
// }//System.out.println("gameGUI.netWorkManager:"+gameGUI.netWorkManager);players.add(new DefaultComboBoxModel());players.add(mode1);players.add(mode2);players.add(mode3);for(int y=0;y<jcbs.length;++y){jcbs[y][0] = new JComboBox();jcbs[y][0].setModel(players.get(y));jcbs[y][0].addItemListener(new GameItemListener(y));jcbs[y][0].setLocation(50, location);initJComboBox(jcbs[y][0]);jcbs[y][1] = new JComboBox(type);jcbs[y][1].setLocation(200, location);jcbs[y][1].setVisible(false);initJComboBox(jcbs[y][1]);location+=30;}}public void addPlayer(int index,String name){System.out.println("addplayer:"+index+","+name);players.get(index).addElement(name);players.get(index).setSelectedItem(name);}public void selectPlayer(int index,String name){players.get(index).setSelectedItem(name);}public void delPlayer(int index,String oldName){players.get(index).removeElement(oldName);
// for(int i=0;i<players.get(index).getSize();++i){
// Object item = players.get(index).getElementAt(i);
// if(item.equals(newName)){
// players.get(index).setSelectedItem(newName);
// return;
// }
// }
// players.get(index).addElement(newName);}private class GameItemListener implements ItemListener{int index;public GameItemListener(int index) {this.index = index;}public void itemStateChanged(ItemEvent e) {String value = e.getItem().toString();if(value.equals("Closed")||e.getItem().toString().equals("Open")){jcbs[index][1].setVisible(false);}else{jcbs[index][1].setVisible(true);}}}private void initJComboBox(JComboBox jcb){jcb.setSize(120, 20);jcb.setOpaque(false);jcb.setFocusable(false);jcb.setRenderer(new StarComboBoxRender());jcb.setUI((ComboBoxUI) StarComboBoxUI.createUI(jcb));jcb.setBorder(new RoundBorder(Color.red));add(jcb);}public void paintComponent(Graphics g) {g.drawImage(image, 0, 0, null);g.setColor(fillColor);g.fillRect(20, 45, getWidth() - 25, getHeight() - 50);g.setColor(borderColor);g.drawRect(20, 45, getWidth() - 25, getHeight() - 50);g.setColor(titleColor);g.drawString("Create Game:", 50, 100);}public void update(long elapsedTime) {x = elastic.update(elapsedTime);setLocation(x, y);}/*** New Game listener*/ActionListener newbtnLis = new ActionListener() {public void actionPerformed(ActionEvent e) {GameGUI gamePanel = (GameGUI) NewGamePanel.this.getParent();leftPanel.elastic.slide(50, -300);rightPanel.elastic.slide(600, 200);try {Thread.sleep(200);} catch (InterruptedException e1) {e1.printStackTrace();}gamePanel.switchNewGame();}};ActionListener loadbtnLis = new ActionListener() {public void actionPerformed(ActionEvent e) {}};}/*** 右边Panel*/class RightPanel extends JPanel {private int x, y;Elastic elastic = new Elastic(800, -180);Image image = ResourceManager.loadImage("right.png");JButton startbtn = new JButton("Start");JButton returnbtn = new JButton("Return");public RightPanel(JPanel parent) {setLayout(null);setSize(180, 180);x = (parent.getWidth() - getWidth());y = 460;setLocation(x, y);initButton(startbtn, startListen);startbtn.setLocation(0, 45);startbtn.setSize(150, 28);add(startbtn);initButton(returnbtn, returnListen);returnbtn.setLocation(0, 75);returnbtn.setSize(150, 28);add(returnbtn);}public void paintComponent(Graphics g) {g.drawImage(image, getWidth() - image.getWidth(null), 0, null);}public void update(long elapsedTime) {x = elastic.update(elapsedTime);setLocation(x, y);}ActionListener startListen = new ActionListener() {public void actionPerformed(ActionEvent e) {PlayerList playerList = gameGUI.netWorkManager.startGame();if(playerList!=null){leftPanel.elastic.slide(50, -300);rightPanel.elastic.slide(600, 200);try {Thread.sleep(200);} catch (InterruptedException e1) {e1.printStackTrace();}gameGUI.switchProgress(playerList.getType(),playerList.getPlayers());}}};ActionListener returnListen = new ActionListener() {public void actionPerformed(ActionEvent e) {leftPanel.players.get(0).removeAllElements();gameGUI.netWorkManager.close();GameGUI gamePanel = (GameGUI) NewGamePanel.this.getParent();leftPanel.elastic.slide(50, -300);rightPanel.elastic.slide(600, 200);try {Thread.sleep(200);} catch (InterruptedException e1) {e1.printStackTrace();}gamePanel.switchMainMenu();}};}
}
源码获取:博客首页 "资源" 里下载!
相关文章:

可以发张图片做链接用吗
转载于:https://www.cnblogs.com/wasss/p/4466492.html

更改显示器的分辨率
1.桌面右击,如图1-1所示。2.点击屏幕分辩率,选择分辨率调大小,确定,如图1-2所示。转载于:https://blog.51cto.com/qikai/1367734

Java 处理0x00特殊字符
Java 处理0x00特殊字符 一、0x00字符 1,0x00是ascii码的0值:NUL 2,0x00在windows系统中显示: 3,0x00在Linux中显示: ctrlV ctrl可以打出此字符 二、Java解决0x00字符 str.replaceAll("\\u0000",&…

关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文…想写一些有意思的东西。 文章目录环检测在图数据结构中的应用深度/广度优先 检测环并查集数据结构 (Union-Find)基本概念初始化合并 union查找祖先优化1: 合并过程 利用 rank 优化路径优化2: 路径压缩(Path Compression)并查集 解决图中检测环问题环检测在…

Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)
源码获取:博客首页 "资源" 里下载! 运行环境:jdk1.8、tomcat7.0/8.5、Mysql5.7/5.1、Maven3.6/3.5、 eclipse/STS 功能简介:计划进度、设备管理、工艺监控、物料监控、质量监控、人员监控等 访问注册控制层:…

JAVA-Eclipse快捷键
Ctrl1:快速修复。CtrlD:快速删除行。ShiftEnter:快速调到下一行。CtrlF11:快速运行。Alt上下方向键:快速移动。CtrlM:光标所在视图最大化。Alt/:智能补全。Ctrl/:快速注释代码。 转载于:https://www.cnblogs.com/bluewhy/p/44669…

Android RelativeLayout属性
// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的控件之上;android:layout_below 将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘…

详解Azure的权限控制
注意:本文档仅限于Azure国际版,国内版略有不同Azure中的角色分配相对来说是比较复杂的的,对于任何云组织来说,云的资源访问管理权限都是一项非常重要的功能,azure中的授权系统叫做基于角色的访问控制(RBAC&…

SNMP introduction
简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。许多人认为 SNMP在IP上运行的原因是Internet运行的是TCP/IP协议,然而事实并不是这样。 SNMP被设计成与协议无…

Java项目:在线考试系统(java+SSM+mysql+JSP)
源码获取:博客首页 "资源" 里下载! 运行环境:jdk1.8、Mysql5.7、Tomcat8.5、IDEA/Eclipse 功能简介:在线考试、历史回顾、个人成绩查询等。 管理员和教师功能有:学院管理、班级管理、课程管理、教师、学生…

Keil中使用宏编译来定义DEBUG输出
使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出。 #define DEBUG 1 #if (DEBUG 1) #define DBG(Args...) printf(##Args) #define DBGFL(s, Args...) printf("[%s:%d]&qu…

解决用户使用临时配置文件登陆WIN7的问题
用户登录Win7后,经常会遇到 “您已使用临时配置文件登陆” 的提示,忽略此提示的用户通常在桌面上保留的文件再次重启进入后发现文件丢失了,或者原有桌面上的文件不见了,这样一定程度上降低了工作的效率.这里主要说一下如何解决此问题。用户登…

chosen.jquery.js 有搜索功能、多选功能的下拉框插件
chosen.jquery.js 有搜索功能、多选功能的下拉框插件 官方源码: https://github.com/harvesthq/chosen 该源码中的样例index.html有该插件的详细使用介绍posted on 2019-05-09 14:40 三天打鱼,两天晒网 阅读(...) 评论(...) 编辑 收藏 转载于:https://w…

MIB in SNMP
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。图3画…

Java项目:后台管理系统脚手架项目(java+SpringBoot+FreeMarker+mysql+JSP)
源码获取:博客首页 "资源" 里下载! 项目描述: 这是一个基于SpringBoot框架开发的后台管理系统脚手架项目。之所以称为脚手架项目,是因为这个项目复用性很强,如果以后有其他新的项目要设计后台管理系统的话&…

Extjs4.0.7 MVC Architecture异常
uncaught exception: Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class: AM.controller.User 解决方法: 在app.js最上面加上:Ext.Loader.setConfig({ enabled: true }); Ext.Loader.setConfig({ …

Mybatis常见面试题(三)
Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问, B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面? :虽然 Mybatis 解析 Xml 映射文件是按照顺序解析的,但是&#x…

SMI in SNMP
SNMP中,数据类型并不多。这里我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。INTEGER一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如&am…

Java项目:在线拍卖竞价系统(java+SpringBoot+FreeMarker+Mysql+redis)
源码获取:博客首页 "资源" 里下载! 超级管理员:系统管理、用户管理(冻结等)、审批竞拍标的物管理、竞标类型管理、审批机构、个人提现管理(审核)、企业提现管理(审批&…

pig脚本不需要后缀名(python tempfile模块生成pig脚本临时文件,执行)
pig 脚本运行不需要后缀名 pig脚本名为tempfile,无后缀名 用pig -f tempfile 可直接运行 另外,pig tempfile也可以直接运行这样就可以用python临时文件存储pig脚本内容直接调用 python调用pig脚本的一种方式 将pig脚本用任意文件存储,执行时写…

老谢oracle视频笔记_day02
1:databasea:physical structure1:controlfile控制文件select * from v$controlfile;11g 以三个11g二个互为镜像文件坏了数据库就打不开了..IO一个块 16k一个文件2MB不会太大?10MB数据库名数据文件位置很多的参数.....2:datafile 数据文件select file_name,file_id from dba_d…

WCDMA系统中的扰码规划
摘要:宽带码分多址(WCDMA)系统采用码分多址的无线接入方式,不需频率规划,但需进行相邻小区扰码的规划用以区分各小区。通过WCDMA无线网络的扰码规划,可以确定两个使用相同扰码的小区的复用距离,区分各小区。扰码规划时…

Java项目:宿舍寝室维修上报管理系统(java+SpringBoot+FreeMarker+Mysql)
源码获取:博客首页 "资源" 里下载! 管理员:校园管理(楼栋管理、宿舍管理)、师生管理(学生管理、辅导员管理)、维修管理(维修工管理、维修进度管理)、阅览室管理…

项目需求分析与建议
软件名称:私人助手 1.N(需求):当今生活节奏迅速,每个人每天都有许多事情要做,堆积成山的事情往往让人感到迷茫,不知道什么时候要做什么事情。私人助手就是为了解决这个烦恼而产生,它会根据最初你添加的事物…

使用面向 iOS 的本机插件扩展 PhoneGap
本文细致探讨了 Xcode(以 iOS 设备为目标)中的 PhoneGap(也称为 Apache Cordova)应用程序本机插件。如果您刚开始接触 PhoneGap 或者需要回顾 PhoneGap 基础知识,请先阅读 Xcode for iOS 的 PhoneGap 入门,…

算法总结---最常用的五大算法(算法题思路)
算法总结---最常用的五大算法(算法题思路) 一、总结 一句话总结: 【明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组】 【最简实例分析:比如思考dijkstra:假设先只有三个点】…

软切换中的测量
软切换中的测量 同频测量: CPICH RSCP、Ec/N0, 事件触发报告,1A,...,1F 1A,相对门限增加事件,表示一个小区的质量已经接近最好小区或者活动集质量 1B,相对门限删除事件,表示一个小区…

测试与封装5.1.5.2
1.第一阶段目标 - 把计算的功能封装成类。2.设计测试用例:用白盒与黑盒测试设计技术,为计算核心设计测试用例。3.在实验环境中(如MyEclipse集成开发环境Junit测试框架)运行测试用例,分析测试结果,找出程序问…

Java项目:企业员工绩效工资管理系统(java+SpringBoot+FreeMarker+Mysql)
源码获取:博客首页 "资源" 里下载! 超级管理员等角色,除基础脚手架外,实现的功能有: 超级管理员:系统管理、用户管理(冻结等)、职称管理、部门管理(工资项&am…

Sql server 阻塞定位
很多人都遇到过这样的情况,当网站达到一定的访问量,数据库就会成为瓶颈,进而引起阻塞。有人认为这可能就是硬件的极限了,于是想办法增加硬件设备。而我本人认为问题的元凶可能是性能不高的sql脚本,引起了阻塞。如果你和…