基于java+swing的潜艇大战项目游戏(java+swing)
功能简介:
Java swing实现的一款小游戏潜艇大战的项目源码
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
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);
}
}
}
}
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){
* 右边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);
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) {
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();
}
});
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;
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"};
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;
// 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);
}
}
}
}
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);
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);
--controlPanel.map_panel.y;
}
gridMapRender.moveX = x;
gridMapRender.moveY = y;
}
});
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) {}
});
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());
gamePanel.switchMainMenu();
}
};
}
}
游戏界面:
@SuppressWarnings({ "unused", "serial" })
public class GameGUI extends JPanel {
//卡片布局器
private CardLayout cardLayout = new CardLayout();
//进度条面板
private ProgressPanel progressPanel;
//菜单面板
private MainMenuPanel menuPanel;
//游戏面板
private GamePanel gamePanel;
//需要update
private Abstractpanel currentPanel;
}
}
}
游戏界面:
/**
* 游戏界面
*/
public class GamePanel extends Abstractpanel{
GridMap gridmap;
GridMapRender gridMapRender;
Control control;
ConsolePanel controlPanel;
Robot robot;
public void init(){
initControl();
gridmap = ResourceManager.resourceManager.getGridMap();
};
}
}
游戏界面:
@SuppressWarnings({ "unused", "serial" })
public class GameGUI extends JPanel {
//卡片布局器
private CardLayout cardLayout = new CardLayout();
//进度条面板
private ProgressPanel progressPanel;
//菜单面板
private MainMenuPanel menuPanel;
//游戏面板
private GamePanel gamePanel;
//需要update
private Abstractpanel currentPanel;
//单人游戏面板
private SingleGamePanel singleGamePanel;
//多人能游戏面板
private MutilPlayerPanel mutilPlayerPanel;
NewGamePanel newGamePanel;
}
});
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)){
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();
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 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){
//卡片布局器
private CardLayout cardLayout = new CardLayout();
//进度条面板
private ProgressPanel progressPanel;
//菜单面板
private MainMenuPanel menuPanel;
//游戏面板
private GamePanel gamePanel;
//需要update
private Abstractpanel currentPanel;
//单人游戏面板
//进度条面板
private ProgressPanel progressPanel;
//菜单面板
private MainMenuPanel menuPanel;
//游戏面板
private GamePanel gamePanel;
//需要update
private Abstractpanel currentPanel;
//单人游戏面板
private SingleGamePanel singleGamePanel;
//多人能游戏面板
private MutilPlayerPanel mutilPlayerPanel;
NewGamePanel newGamePanel;
NetWorkManager netWorkManager;
GridMapRender mapRender;
JFrame frame;
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);
});
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);
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);