Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)
功能简介:
星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一个区,然后邀请玩家加入一起玩
游戏界面:
@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;
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();
}
}
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;
if(x>screenX&&offsetX<GridMapRender.tileXToPx(107)){
gridMapRender.offsetX=offsetX+GridMapRender.TILE_WIDTH;
robot.mouseMove(screenX, y);
++controlPanel.map_panel.x;
}
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)){
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);
}
}
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码