需要帮忙运行调试的小伙伴找我,v:duole1314
客户端和主机端目录结构:
ClientView.java(客户端程序入口)
// 坦克大战连线版用户端
import javax.swing.*;
import java.awt.*;
//这个类代表服务器的图形界面
public class ClientView extends Jframe{
public drawingPanel mainPanel;
public JButton sendMessage, connectServer, exit, pauseAndResume, help;
public JTextField messageField, IPfield;
public JLabel enterIP;
public Image offScreenImage;
public ClientControler controler;
public ClientModel model;
public ClientView(){
super("坦克大战");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) { }
getContentPane().setLayout(null);
//设置动画绘制主面板
mainPanel = new drawingPanel();
mainPanel.setLayout(null);
mainPanel.setBounds(0, 22, 679, 605);
mainPanel.setBackground(new Color(128, 64, 0));
messageField = new JTextField();
messageField.setBounds(0,519, 560,22);
messageField.setEnabled(false);
sendMessage = new JButton("发送");
sendMessage.setBounds(570,518, 62,24);
sendMessage.setFocusable(false);
mainPanel.add(messageField);
mainPanel.add(sendMessage);
getContentPane().add(mainPanel);
mainPanel.setFocusable(true);
//设置选项按钮和IP文本字段
enterIP = new JLabel("输入主机IP");
enterIP.setBounds(10, 0,60,22);
getContentPane().add(enterIP);
IPfield = new JTextField();
IPfield.setBounds(65, 0,90,22);
getContentPane().add(IPfield);
connectServer = new JButton("连接主机");
connectServer.setBounds(160, 0,100,22);
getContentPane().add(connectServer);
connectServer.setFocusable(false);
pauseAndResume = new JButton("暂停/继续");
pauseAndResume.setBounds(260, 0,100,22);
getContentPane().add(pauseAndResume);
pauseAndResume.setFocusable(false);
help = new JButton("帮助");
help.setBounds(360, 0,100,22);
getContentPane().add(help);
help.setFocusable(false);
exit = new JButton("退出");
exit.setBounds(460, 0,100,22);
getContentPane().add(exit);
exit.setFocusable(false);
//设置面框架
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
setBounds(150, 130, 640, 590);
setVisible(true);
setResizable( false );
//设置客户端模型
model = new ClientModel(this);
//设置客户端控制器
controler = new ClientControler(this, model);
}
public static void main(String[] args){
new ClientView();
}
}
ClientModel.java
import java.net.*;
import java.io.*;
import java.awt.event.*;
import java.awt.*;
public class ClientModel implements ActionListener{
public ClientView view;
//连接变量
public Socket clientSocket;
public PrintWriter out;
public BufferedReader in;
public String fromServer, fromUser;
public String serverIP;
//客户端状态
public boolean serverConnected;
public boolean gameStarted;
public boolean gamePaused;
public boolean gameOver;
public boolean serverVoteYes, serverVoteNo;
public boolean clientVoteYes, clientVoteNo;
public boolean pausePressed;
//图像信息
public String[] messageQueue;
public int messageIndex;
public String playerTypedMessage = "";
//textures
public Image[] textures;
//实际的游戏运行在这个线程,而主线程听用户的输入
public Ticker t;
//游戏变量
public static int gameFlow;
public Actor[] drawingList;
public boolean moveUp;
public boolean moveDown;
public boolean moveLeft;
public boolean moveRight;
public boolean fire;
public ClientModel(ClientView thisview){
view = thisview;
messageQueue = new String[8];
view.mainPanel.messageQueue = messageQueue;
addMessage("欢迎来到坦克大战用户端!请输入主机IP地址然后点击"连接主机"按钮开始游戏");
t = new Ticker(1000);
t.addActionListener(this);
}
public void connectServer(){
addMessage("正在连接主机");
try{
serverIP = view.IPfield.getText();
InetAddress addr = InetAddress.getByName(serverIP);
clientSocket = new Socket(addr, 9999);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}catch(Exception e){
t.stop();
System.out.println(e);
addMessage("连接中出现错误, 请确认 1. 输入的IP是否正确, 2. 主机端已存在");
return;
}
serverConnected = true;
addMessage("已成功连接到主机,开始载入游戏");
view.IPfield.setFocusable(false);
view.IPfield.setEnabled(false);
//加载游戏 texture
textures = new Image[88];
for(int i = 1; i < textures.length+1; i++)
textures[i-1] = Toolkit.getDefaultToolkit().getImage("image\" + i + ".jpg");
drawingList = new Actor[400];
gameStarted = true;
view.mainPanel.gameStarted = gameStarted;;
view.mainPanel.drawingList = drawingList;
view.messageField.setEnabled(true);
addMessage("载入完毕,游戏开始了!");
}
public void actionPerformed(ActionEvent e){
connectServer();
//如果程序不能连接到服务器然后什么都不做
if(!serverConnected)
return;
//游戏逻辑循环,客户端程序实际不执行任何逻辑计算,它只接受drawing-instructions
try{
while ((fromServer = in.readLine()) != null) {
fromUser = "";
gameFlow++;
if(pausePressed){
fromUser+= "x;";
pausePressed = false;
}
if(gameOver){
if(clientVoteNo)
System.exit(0);
if(clientVoteYes){
fromUser+="j;";
if(serverVoteYes){
addMessage("主机端玩家决定再玩一次,游戏重新开始了...");
gameOver = false;
clientVoteYes = false;
serverVoteYes = false;
}
}
}
//指令字符串做出反馈,告诉服务器客户端在做什么
fromUser +="m";
if(moveUp)
fromUser+= "1";
else
fromUser+= "0";
if(moveDown)
fromUser+="1";
else
fromUser+= "0";
if(moveLeft)
fromUser+="1";
else
fromUser+= "0";
if(moveRight)
fromUser+="1";
else
fromUser+= "0";
if(fire)
fromUser+="1";
else
fromUser+= "0";
fromUser+=";";
//来自服务器的进程指令
instructionHandler.handleInstruction(this, fromServer);
//从消息队列中删除一个消息每10秒,(如果有)
if(gameFlow%300 == 0)
removeMessage();
//输出玩家坦克信息
if(!playerTypedMessage.equals("")){
fromUser+=playerTypedMessage;
playerTypedMessage = "";
}
//发送反馈指令
out.println(fromUser);
//调用视图重新绘制它自己
view.mainPanel.repaint();
//如果切换到对话模式的玩家,那么停止所有坦克行动
if(!view.mainPanel.hasFocus()){
moveLeft = false;
moveUp = false;
moveDown = false;
moveRight = false;
fire = false;
}
}
}catch(Exception ex){
ex.printStackTrace();
t.stop();
view.messageField.setEnabled(false);
serverConnected = false;
gameStarted = false;
view.mainPanel.gameStarted = false;
gameOver = false;
addMessage("主机端退出了");
view.IPfield.setFocusable(true);
view.IPfield.setEnabled(true);
//当有错误发生时,关闭创建的任何事情
try{
out.close();
in.close();
clientSocket.close();
}catch(Exception exc){
System.out.println(exc);
}
}
}
//在屏幕上显示一条消息
public void addMessage(String message){
if(messageIndex < 8){
messageQueue[messageIndex] = message;
messageIndex++;
}
else{
for(int i = 0; i < 7; i++)
messageQueue[i] = messageQueue[i+1];
messageQueue[7] = message;
}
//调用视图来重新绘制屏幕,如果没有开始游戏
if(!gameStarted)
view.mainPanel.repaint();
}
//删除最早的消息在屏幕上
public void removeMessage(){
if(messageIndex == 0)
return;
messageIndex--;
for(int i = 0; i < messageIndex; i++)
messageQueue[i] = messageQueue[i+1];
messageQueue[messageIndex] = null;
//调用视图来重新绘制屏幕如果没有开始游戏
if(!gameStarted)
view.mainPanel.repaint();
}
//添加一个游戏对象(如坦克、子弹等)图纸清单
public void addActor(Actor actor){
for(int i = 0; i < drawingList.length; i ++ )
if(drawingList[i] == null){
drawingList[i] = actor;
break;
}
}
//删除一个游戏对象从图纸清单
public void removeActor(Actor actor){
for(int i = 0; i < drawingList.length; i ++ )
if(drawingList[i] == actor){
drawingList[i] = null;
break;
}
}
}
ClientController.java
import javax.swing.*;
import java.awt.event.*;
//Download:http://www.codefans.net
//这个类处理来自客户端视图框架的输入
public class ClientControler{
public boolean serverConnected;;
public boolean gameStarted;
public boolean gamePaused;
public ClientView view;
public ClientModel model;
public int helpMessageCount = 1;
public ClientControler(ClientView thisview, ClientModel thismodel){
view = thisview;
model = thismodel;
//发送消息按钮操作
view.sendMessage.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(!model.gameStarted){
model.addMessage("还没有和主机端玩家联上, 无法发送对话");
return;
}
if(!view.messageField.getText().equals("")){
model.addMessage("用户端玩家说:" + view.messageField.getText());
model.playerTypedMessage += "e" + view.messageField.getText() + ";";
view.messageField.setText("");
}else{
model.addMessage("对话内容不能为空");
}
}
}
);
//handel connectServer按钮操作
view.connectServer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(!model.serverConnected){
model.serverIP = view.IPfield.getText();
model.t.start();
}
}
}
);
//handel pauseAndResume 按钮操作
view.pauseAndResume.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(!model.gameOver && model.gameStarted){
model.pausePressed = true;
if(!model.gamePaused){
model.gamePaused = true;
model.addMessage("用户端玩家暂停了游戏");
}else{
model.gamePaused = false;
model.addMessage("用户端玩家取消了暂停");
}
}
}
}
);
//handel help 按钮操作
view.help.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
model.addMessage("******************************坦克大战 ******************************");
model.addMessage("帮助: 按s键发射子弹,按键盘的方向键来控制坦克的移动");
model.addMessage("如果按键没有反应请 1. 关闭大写功能; 2. 用 tab键切换 ");
model.addMessage("如果您在使用对话界面请移动到控制界面.");
model.addMessage("********************************************************************************");
}
}
);
//handel exit 按钮操作
view.exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
//处理从键盘输入
view.messageField.addKeyListener( new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(helpMessageCount > 0){
model.addMessage("提示:用"tab"键可以自由切换于控制界面和对话界面");
model.addMessage("提示:按回车键可以直接发送您的对话");
helpMessageCount--;
}
if(e.getKeyCode()==e.VK_ENTER){
if(!view.messageField.getText().equals("")){
model.addMessage("用户端玩家说:" + view.messageField.getText());
model.playerTypedMessage += "e" + view.messageField.getText() + ";";
view.messageField.setText("");
}else{
model.addMessage("对话内容不能为空");
}
}
}
});
JPanel temp = view.mainPanel;
temp.addKeyListener( new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_UP){
model.moveUp = true;
model.moveDown = false;
model.moveLeft = false;
model.moveRight = false;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN ){
model.moveDown = true;
model.moveUp = false;
model.moveLeft = false;
model.moveRight = false;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT ){
model.moveLeft = true;
model.moveUp = false;
model.moveDown = false;
model.moveRight = false;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT ){
model.moveLeft = false;
model.moveUp = false;
model.moveDown = false;
model.moveRight = true;
}
if(e.getKeyChar() == 's')
model.fire = true;
if(e.getKeyCode()==e.VK_ENTER){
if(!view.messageField.getText().equals("")){
model.addMessage("用户端玩家说:" + view.messageField.getText());
model.playerTypedMessage += "e" + view.messageField.getText() + ";";
view.messageField.setText("");
}
}
if(e.getKeyChar() == 'y' && model.gameOver && !model.clientVoteYes){
model.clientVoteYes = true;
model.addMessage("等待主机端玩家回应...");
}
if(e.getKeyChar() == 'n' && model.gameOver)
model.clientVoteNo = true;
}
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_UP)
model.moveUp = false;
if(e.getKeyCode() == KeyEvent.VK_DOWN )
model.moveDown = false;
if(e.getKeyCode() == KeyEvent.VK_LEFT )
model.moveLeft = false;
if(e.getKeyCode() == KeyEvent.VK_RIGHT )
model.moveRight = false;
if(e.getKeyChar() == 's')
model.fire = false;
}
}
);
}
}
DrawingPanel.java
import java.awt.*;
import javax.swing.*;
//绘图面板类属于客户端程序
public class drawingPanel extends JPanel{
public Image offScreenImage;
public String[] messageQueue;
public Actor[] drawingList;
public boolean gameStarted;
public int green, red, blue;
public int P1Life, P2Life, P1Score, P2Score, EnemyLeft, LevelIndex;
public Image P1Image, P2Image;
public drawingPanel() {
P1Image = Toolkit.getDefaultToolkit().getImage("image\" + 55 + ".jpg");
P2Image = Toolkit.getDefaultToolkit().getImage("image\" + 73 + ".jpg");
}
public void paintComponent(Graphics g) {
Graphics offScreenGraphics;
if (offScreenImage == null) {
offScreenImage = createImage(640, 550);
}
offScreenGraphics = offScreenImage.getGraphics();
myPaint(offScreenGraphics);
g.drawImage(offScreenImage, 0, 0, this);
}
public void myPaint(Graphics g) {
super.paintComponent(g);
if(gameStarted){
//画游戏信息
g.setColor(new Color(81,111, 230));
g.drawString("第 " + LevelIndex + " 关", 527, 39);
g.drawString("敌人数 = " + EnemyLeft, 527, 79);
g.setColor(Color.yellow);
g.drawImage(P1Image, 520, 380, null );
g.drawString("x", 555, 395);
g.drawString(P1Life + "", 565, 396);
String SCORE = "000000000" + P1Score;
g.drawString("P1" +" 得分:" + "", 515, 370);
g.drawString(SCORE.substring(SCORE.length() - 7, SCORE.length()) + "", 566, 370);
g.setColor(Color.green);
g.drawImage(P2Image, 520, 460, null );
g.drawString("x", 555, 475);
g.drawString(P2Life + "", 565, 476);
SCORE = "000000000" + P2Score;
g.drawString("P2" +" 得分:" + "", 515, 450);
g.drawString(SCORE.substring(SCORE.length() - 7, SCORE.length()) + "", 566, 450);
//绘制背景
g.setColor(Color.blue);
g.drawRect(10, 10, 501, 501);
//绘制坦克等等
if(drawingList != null)
for(int i = 0; i < drawingList.length; i++)
if(drawingList[i] != null)
drawingList[i].draw(g);
//绘制获胜场景
if(level.winningCount > 150){
int temp = level.winningCount - 150;
if(temp*10 > 300)
temp = 30;
if(level.winningCount > 470)
temp = 500 - level.winningCount;
g.setColor(Color.gray);
g.fillRect(11,11, 500, temp*10);
g.fillRect(11, 500 - temp*10, 500, (1+temp)*10 + 2);
if(level.winningCount > 190 &&level.winningCount < 470){
if(level.winningCount > 400 ){
red+=(int)((128-red)*0.2);
green+=(int)((128-green)*0.2);
}
g.setColor(new Color(red, green, blue));
g.drawString("过 关 了 !", 240, 250);
}
}else{
green = 23; red = 34; blue = 128;
}
}
//消息
g.setColor(new Color(255, 255, 255));
if(messageQueue != null){
for(int i = 0 ; i < 8; i++){
if(messageQueue[i] != null)
g.drawString(messageQueue[i] , 5, 12 +i*16);
else
break;
}
}
}
}
instructionHandler.java
//该类从服务器程序解码指令字符串,然后将字符串转换为真正的指令
//由客户端程序可读
public class instructionHandler{
public static void handleInstruction(ClientModel gameModel, String instruction){
if(instruction.length() == 0)
return;
int i = 0;
while(i < instruction.length()){
String perInstruction = "";
//指令由”;“开头在instruction-string分离
while(!instruction.substring(i, i+1).equals(";")){
perInstruction+=instruction.substring(i, i+1);
i++;
}
//指令“L”开头是负载水平,其次是“L”数量水平指数
if(perInstruction.substring(0,1).equals("L")){
level.loadLevel(gameModel, Integer.parseInt(perInstruction.substring(1,2)));
return;
}
//指令“w”开头意味着一些事情改变了在墙上的对象
if(perInstruction.substring(0,1).equals("w")){
int xPos = 0; int yPos = 0; boolean[] shape = new boolean[16];
String temp = "";
int j = 1;
//得到x的位置
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y的位置
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
yPos = Integer.parseInt(temp);
//墙的详细的边界
for(int k = 0; k < 16; k++){
if(perInstruction. substring(j, j+1).equals("1"))
shape[k] = true;
else
shape[k] = false;
j++;
}
//执行指令
for(int k = 0; k < gameModel.drawingList.length; k++){
if(gameModel.drawingList[k] != null){
if(gameModel.drawingList[k].getxPos() == xPos && gameModel.drawingList[k].getyPos() == yPos){
wall tempWall = new wall(xPos, yPos, 4, gameModel);
tempWall.shape = shape;
gameModel.drawingList[k] = tempWall;
}
}
}
}
//指令“s”开头意味着一些事情改变了一个铁墙对象
if(perInstruction.substring(0,1).equals("s")){
int xPos = 0; int yPos = 0; boolean[] shape = new boolean[4];
String temp = "";
int j = 1;
//得到x的位置
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y的位置
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
yPos = Integer.parseInt(temp);
//详细的钢墙边境
for(int k = 0; k < 4; k++){
if(perInstruction. substring(j, j+1).equals("1"))
shape[k] = true;
else
shape[k] = false;
j++;
}
//执行指令
for(int k = 0; k < gameModel.drawingList.length; k++){
if(gameModel.drawingList[k] != null){
if(gameModel.drawingList[k].getxPos() == xPos && gameModel.drawingList[k].getyPos() == yPos){
Steelwall tempWall = new Steelwall(xPos, yPos, 4, gameModel);
tempWall.shape = shape;
gameModel.drawingList[k] = tempWall;
}
}
}
}
//指令“b”开头意味着基地已被摧毁
if(perInstruction.substring(0,1).equals("b")){
gameModel.drawingList[4] = new normalObject(260, 498, gameModel, "base", 1);
}
//指令“n”开头显示正常的对象,如坦克、启动符号
if(perInstruction.substring(0,1).equals("n")){
int xPos = 0; int yPos = 0; int textureIndex = -1;
String temp = "";
int j = 1;
//得到x对象的位置
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y对象的位置
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
yPos = Integer.parseInt(temp);
//获得对象的纹理指数
temp = "";
while(j < perInstruction.length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
textureIndex = Integer.parseInt(temp);
//执行指令
gameModel.addActor(new normalObject(xPos, yPos, gameModel, "normal", textureIndex));
}
//指令“t”开头表明子弹
if(perInstruction.substring(0,1).equals("t")){
int xPos = 0; int yPos = 0; int direction = -1;
String temp = "";
int j = 1;
//得到x子弹的位置
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y子弹的位置
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
yPos = Integer.parseInt(temp);
//子弹的方向
temp = "";
while(j < perInstruction.length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
direction = Integer.parseInt(temp);
//执行指令
gameModel.addActor(new bullet(xPos, yPos, gameModel, direction));
}
//指令“o”开头表示一个炸弹
if(perInstruction.substring(0,1).equals("o")){
int xPos = 0; int yPos = 0; int size = -1;
String temp = "";
int j = 1;
//得到x炸弹的位置
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y炸弹的位置
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
yPos = Integer.parseInt(temp);
//炸弹的大小
temp = "";
while(j < perInstruction.length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
if(temp.equals("small"))
size = 1;
else
size = 0;
//执行指令
gameModel.addActor(new bomb(xPos, yPos, size, gameModel));
}
//指令“i”开头表明坦克盾牌
if(perInstruction.substring(0,1).equals("i")){
int xPos = 0; int yPos = 0;
String temp = "";
int j = 1;
//得到x位置的盾牌
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
xPos = Integer.parseInt(temp);
//得到y位置的盾牌
temp = "";
while(j < perInstruction. length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
yPos = Integer.parseInt(temp);
//执行指令
gameModel.addActor(new shield(xPos, yPos, gameModel));
}
//指令“p”开头表示水平和玩家信息
if(perInstruction.substring(0,1).equals("p")){
String temp = "";
int j = 1;
//得到敌人离开的数量
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.EnemyLeft = Integer.parseInt(temp);
//得到水平指数
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.LevelIndex = Integer.parseInt(temp);
//玩家1的生命量
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.P1Life = Integer.parseInt(temp);
//玩家1的分数
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.P1Score = Integer.parseInt(temp);
//玩家2的生命量
temp = "";
while(!perInstruction. substring(j, j+1).equals(",")){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.P2Life = Integer.parseInt(temp);
//玩家2的分数
temp = "";
while(j < perInstruction.length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
j++;
gameModel.view.mainPanel.P2Score = Integer.parseInt(temp);
}
//指令“g”开头表明获取胜利的统计数量
if(perInstruction.substring(0,1).equals("g")){
String temp = "";
int j = 1;
//得到敌人离开的数量
while(j < perInstruction.length()){
temp+=perInstruction. substring(j, j+1);
j++;
}
level.winningCount = Integer.parseInt(temp);
}
//指令“m”开头表示服务器玩家的信息
if(perInstruction.substring(0,1).equals("m")){
gameModel.addMessage("主机端玩家说:" + perInstruction.substring(1,perInstruction.length()));
}
//指令“a”开头表示游戏结束
if(perInstruction.substring(0,1).equals("a")){
if(!gameModel.gameOver){
gameModel.addMessage("GAME OVER ! 想再玩一次吗 ( y / n ) ?");
gameModel.gameOver = true;
}
}
//指令“j”开头表示服务器玩家想在玩一次
if(perInstruction.substring(0,1).equals("j")){
if(gameModel.gameOver)
gameModel.serverVoteYes = true;
}
//指令“x”开头表示服务器玩家暂停游戏
if(perInstruction.substring(0,1).equals("x")){
int temp = Integer.parseInt(perInstruction.substring(1,2));
if(temp == 0){
if(gameModel.gamePaused){
gameModel.addMessage("主机端玩家取消了暂停");
gameModel.gamePaused = false;
}
}else{
if(!gameModel.gamePaused){
gameModel.addMessage("主机端玩家暂停了游戏");
gameModel.gamePaused = true;
}
}
}
i++;
}
}
}
level.java
import java.awt.*;
//服务器端的level类
//因为只有一层对象,所以在这个类是一个静态变量
public class level{
public static int winningCount;
public static void loadLevel(ClientModel gameModel, int levelIndex){
//清除所有的东西
for(int i = 0; i < 400; i ++)
gameModel.drawingList[i] = null;
//加载基地
gameModel.drawingList[0] = new wall(248, 498, 2, gameModel);
gameModel.drawingList[1] = new wall(273, 498, 3, gameModel);
gameModel.drawingList[2] = new wall(248, 473, 1, gameModel);
gameModel.drawingList[3] = new wall(273, 473, 1, gameModel);
gameModel.drawingList[4] = new normalObject(260, 498, gameModel, "base", 0);
//加载一个级别
if(1+ (levelIndex-1)%8 == 1){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "ss", "ss", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"s0", "##", "##", "__", "__", "__", "__", "__", "##", "s0", "s0", "##", "__", "__", "__", "__", "__", "##", "##", "s0",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "##", "##", "__", "__", "__", "__", "__", "##", "__", "__", "##", "__", "__", "__", "__", "__", "##", "##", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 2){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$",
"$$", "==", "==", "==", "==", "==", "==", "==", "$$", "$$", "==", "==", "==", "==", "==", "==", "==", "==", "==", "$$",
"$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "ss", "##", "##", "##", "##", "##", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "ss", "##", "##", "##", "__", "__", "ss", "ss", "##", "##", "##", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "##", "__", "__", "__", "__", "__", "__", "##", "__", "__", "__", "__", "__", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__", "__", "__", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__", "__", "__", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "##", "##", "##", "##", "##", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "##", "##", "##", "##", "##", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "##", "##", "##", "##", "##", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "##", "##", "##", "##", "##", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "##", "##", "##", "##", "##", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__", "__", "__", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__", "__", "__", "##", "==", "==", "==", "==", "==", "__",
"__", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__", "__", "__", "##", "==", "==", "==", "==", "==", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 3){
String[] level = new String[]{
"__", "__", "__", "ss", "__", "__", "ss", "__", "__", "__", "__", "__", "__", "__", "__", "__", "s3", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "ss", "##", "##", "##", "__", "##", "##", "##", "##", "__", "s3", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "s3", "__", "__", "__",
"__", "__", "ss", "ss", "__", "##", "##", "##", "##", "__", "__", "##", "##", "__", "##", "##", "##", "__", "__", "__",
"__", "__", "__", "ss", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "##", "__", "##", "s1",
"__", "__", "__", "ss", "__", "##", "__", "ss", "##", "ss", "##", "ss", "##", "##", "##", "##", "##", "__", "__", "##",
"__", "__", "__", "ss", "__", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "__", "__", "__",
"__", "__", "__", "ss", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "__", "__", "__",
"__", "__", "__", "##", "ss", "ss", "ss", "ss", "##", "##", "##", "##", "##", "$$", "$$", "$$", "$$", "##", "##", "##",
"##", "__", "__", "##", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "__", "__", "__",
"##", "##", "__", "##", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "__", "__", "__",
"##", "##", "##", "##", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "##", "##", "##", "##", "##", "__", "__", "__",
"##", "##", "##", "##", "##", "##", "$$", "##", "$$", "##", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__",
"##", "##", "##", "##", "$$", "$$", "$$", "$$", "$$", "##", "$$", "$$", "$$", "$$", "$$", "##", "__", "__", "__", "__",
"#0", "s0", "s0", "s0", "$$", "ss", "ss", "ss", "ss", "##", "ss", "ss", "$$", "ss", "ss", "##", "##", "##", "ss", "##",
"__", "__", "__", "##", "__", "__", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "##",
"__", "__", "__", "##", "__", "__", "__", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$",
"__", "__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 4){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "__", "__", "__", "__", "__",
"__", "__", "__", "##", "##", "##", "##", "##", "##", "##", "##", "##", "ss", "##", "##", "##", "##", "__", "__", "__",
"__", "__", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "ss", "ss", "s2", "__", "__",
"__", "__", "##", "##", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$","$$", "$$", "$$", "$$", "$$", "s2", "__", "__",
"__", "__", "##", "##", "##", "$$", "$$", "$$", "$$", "$$", "##", "$$", "$$", "$$", "$$", "$$", "$$", "s2", "__", "__",
"__", "##", "##", "##", "##", "##", "$$", "$$", "$$", "##", "$$", "##", "$$", "$$", "$$", "$$", "$$", "s2", "__", "__",
"__", "##", "##", "##", "##", "##", "$$", "$$", "##", "$$", "$$", "$$", "##", "$$", "$$", "$$", "$$", "s2", "__", "__",
"__", "##", "##", "##", "##", "##", "$$", "##", "$$", "$$", "$$", "$$", "$$", "##", "$$", "$$", "$$", "s2", "__", "__",
"__", "##", "##", "##", "##", "##", "$$", "$$", "##", "$$", "$$", "$$", "##", "$$", "$$", "$$", "$$", "s2", "__", "__",
"__", "##", "##", "##", "##", "$$", "$$", "$$", "$$", "##", "$$", "##", "$$", "$$", "$$", "$$", "##", "s2", "__", "__",
"__", "__", "##", "##", "$$", "$$", "$$", "$$", "$$", "$$", "##", "$$", "$$", "$$", "$$", "$$", "##", "##", "__", "__",
"__", "__", "##", "$$", "$$", "$$", "$$", "$$", "$$", "s3", "s2", "$$", "$$", "$$", "$$", "##", "##", "s0", "s0", "s0",
"__", "__", "##", "##", "##", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "$$", "##", "##", "__", "__", "__", "__",
"__", "__", "__", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "##", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 5){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "==", "==", "==", "__", "__", "==", "==", "==", "==", "==", "==", "__", "==", "==", "==", "==", "==", "==", "__",
"__", "==", "ss", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "==", "__",
"__", "==", "__", "__", "__", "__", "__", "==", "__", "==", "==", "__", "ss", "==", "==", "==", "==", "__", "==", "__",
"__", "==", "__", "==", "==", "==", "==", "==", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__",
"__", "==", "__", "==", "__", "__", "__", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__",
"__", "==", "__", "==", "__", "__", "==", "==", "==", "==", "__", "__", "==", "__", "__", "==", "__", "==", "==", "__",
"__", "==", "__", "==", "__", "__", "==", "__", "__", "__", "__", "__", "==", "ss", "__", "__", "__", "==", "__", "__",
"__", "==", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__", "==", "__", "==",
"__", "==", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__", "__", "==", "__", "==", "__", "__",
"__", "==", "__", "==", "__", "==", "==", "__", "__", "==", "__", "__", "==", "__", "==", "==", "__", "==", "==", "__",
"__", "==", "__", "__", "__", "__", "__", "__", "__", "==", "__", "__", "==", "__", "==", "__", "__", "__", "==", "__",
"__", "==", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "==", "__", "==", "==", "==", "__", "__", "__",
"__", "==", "==", "==", "__", "==", "==", "==", "__", "ss", "ss", "==", "==", "__", "__", "__", "==", "__", "==", "__",
"__", "__", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "==", "__", "ss", "__", "==", "__", "==", "__",
"==", "==", "==", "==", "==", "__", "==", "__", "__", "__", "__", "__", "==", "__", "__", "__", "==", "__", "==", "__",
"__", "__", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "==", "==", "==", "__", "==", "==", "==", "__",
"__", "__", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "==", "__",
"__", "__", "__", "__", "__", "__", "==", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "==", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 6){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "$$", "__", "__", "__", "__", "$$", "__", "__", "__", "__", "__", "__", "__", "__", "__", "$$", "__",
"__", "__", "$$", "ss", "$$", "__", "__", "$$", "ss", "$$", "__", "__", "__", "__", "__", "__", "__", "$$", "ss", "$$",
"__", "$$", "ss", "ss", "$$", "__", "$$", "ss", "ss", "ss", "$$", "__", "__", "__", "__", "__", "__", "$$", "ss", "$$",
"__", "$$", "ss", "ss", "ss", "$$", "ss", "ss", "ss", "$$", "$$", "$$", "$$", "__", "__", "__", "$$", "ss", "ss", "$$",
"__", "$$", "ss", "ss", "ss", "$$", "$$", "ss", "$$", "$$", "ss", "ss", "ss", "$$", "__", "__", "$$", "ss", "ss", "$$",
"$$", "ss", "ss", "ss", "ss", "$$", "__", "$$", "$$", "$$", "ss", "ss", "ss", "$$", "__", "__", "$$", "ss", "ss", "$$",
"$$", "ss", "ss", "ss", "ss", "$$", "__", "__", "$$", "$$", "ss", "$$", "$$", "__", "__", "$$", "ss", "ss", "ss", "$$",
"$$", "ss", "ss", "ss", "ss", "$$", "__", "$$", "ss", "ss", "ss", "$$", "__", "__", "__", "$$", "ss", "ss", "ss", "$$",
"$$", "ss", "ss", "ss", "ss", "$$", "__", "$$", "ss", "ss", "ss", "$$", "__", "__", "__", "$$", "ss", "ss", "$$", "__",
"$$", "ss", "ss", "ss", "$$", "__", "__", "ss", "ss", "$$", "$$", "__", "__", "__", "__", "$$", "ss", "ss", "$$", "__",
"$$", "ss", "ss", "ss", "$$", "__", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "$$", "ss", "ss", "ss", "$$", "__",
"$$", "ss", "ss", "ss", "$$", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "__", "__", "$$", "$$", "$$", "__", "__",
"$$", "ss", "ss", "ss", "$$", "$$", "ss", "$$", "__", "__", "$$", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"$$", "ss", "ss", "ss", "$$", "__", "$$", "__", "__", "$$", "ss", "$$", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "__", "__", "__",
"__", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "$$", "ss", "ss", "ss", "$$", "$$", "$$", "$$", "$$", "__", "__",
"__", "$$", "ss", "ss", "$$", "__", "__", "__", "__", "__", "$$", "ss", "ss", "ss", "ss", "ss", "ss", "ss", "$$", "__",
"__", "__", "$$", "ss", "$$", "__", "__", "__", "__", "__", "__", "$$", "ss", "ss", "ss", "ss", "$$", "$$", "__", "__",
"__", "__", "__", "$$", "__", "__", "__", "__", "__", "__", "__", "__", "$$", "$$", "$$", "$$", "__", "__", "__", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 7){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "$$", "$$", "$$", "__", "__",
"__", "__", "__", "ss", "ss", "ss", "__", "__", "##", "##", "##", "__", "__", "__", "__", "$$", "$$", "$$", "__", "__",
"__", "__", "__", "ss", "ss", "ss", "__", "__", "##", "##", "##", "__", "__", "__", "__", "$$", "$$", "$$", "__", "__",
"__", "__", "__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "==", "==", "==", "__",
"$$", "$$", "$$", "__", "__", "__", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "==", "==", "==", "__",
"$$", "$$", "$$", "__", "__", "__", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "==", "==", "==", "__",
"$$", "$$", "$$", "__", "__", "__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "ss", "ss", "ss", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__", "==", "==", "==", "__", "__",
"__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__", "==", "==", "==", "__", "__",
"__", "__", "__", "__", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__", "==", "==", "==", "__", "__"
};
loadLevel(gameModel, level);
}
if(1+ (levelIndex-1)%8 == 8){
String[] level = new String[]{
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"##", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"##", "##", "##", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "##", "__", "__", "##", "##", "##", "__", "##", "__", "__", "__", "##", "__", "__", "##", "##", "##", "__",
"__", "__", "##", "__", "##", "__", "__", "##", "__", "##", "__", "__", "__", "##", "__", "##", "__", "__", "##", "__",
"__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__",
"__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__",
"__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__", "##", "__", "__", "##", "__", "__", "##", "__",
"##", "__", "##", "__", "##", "__", "__", "##", "__", "__", "__", "##", "__", "__", "__", "##", "__", "__", "##", "__",
"__", "##", "__", "__", "__", "##", "##", "__", "##", "__", "__", "##", "__", "__", "__", "__", "##", "##", "__", "##",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__",
"__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__", "__"
};
loadLevel(gameModel, level);
}
}
public static void loadLevel(ClientModel gameModel, String[] level){
for(int i = 0; i < level.length; i++){
if(level[i].equals("##"))
gameModel.addActor(new wall(23 + (i%20)*25, 23 + (i/20)*25, 4,gameModel));
if(level[i].equals("#0"))
gameModel.addActor(new wall(23 + (i%20)*25, 23 + (i/20)*25, 0, gameModel));
if(level[i].equals("#1"))
gameModel.addActor(new wall(23 + (i%20)*25, 23 + (i/20)*25, 1, gameModel));
if(level[i].equals("#2"))
gameModel.addActor(new wall(23 + (i%19)*25, 23 + (i/20)*25, 2, gameModel));
if(level[i].equals("#3"))
gameModel.addActor(new wall(23 + (i%20)*25, 23 + (i/20)*25, 3, gameModel));
if(level[i].equals("ss"))
gameModel.addActor(new Steelwall(23 + (i%20)*25, 23 + (i/20)*25, 4, gameModel));
if(level[i].equals("s0"))
gameModel.addActor(new Steelwall(23 + (i%20)*25, 23 + (i/20)*25, 0, gameModel));
if(level[i].equals("s1"))
gameModel.addActor(new Steelwall(23 + (i%20)*25, 23 + (i/20)*25, 1, gameModel));
if(level[i].equals("s2"))
gameModel.addActor(new Steelwall(23 + (i%20)*25, 23 + (i/20)*25, 2, gameModel));
if(level[i].equals("s3"))
gameModel.addActor(new Steelwall(23 + (i%20)*25, 23 + (i/20)*25, 3, gameModel));
if(level[i].equals("$$")){
for(int j = 399; j >=0; j--){
if(gameModel.drawingList[j] == null){
gameModel.drawingList[j] = new normalObject(23 + (i%20)*25, 23 + (i/20)*25, gameModel, "grass", -1);
break;
}
}
}
if(level[i].equals("=="))
gameModel.addActor(new normalObject(23 + (i%20)*25, 23 + (i/20)*25, gameModel, "river", 71));
}
}
}
normalObject.java
import java.awt.*;
//这个类代表除了墙和钢墙外所有其他对象
public class normalObject implements Actor{
public String Type;
public Image image;
public int xPos;
public int yPos;
public ClientModel gameModel;
public normalObject(int xPos, int yPos, ClientModel gameModel, String Type, int imageIndex){
this.xPos = xPos;
this.yPos = yPos;
this.gameModel = gameModel;
this.Type = Type;
if(imageIndex != -1)
image = gameModel.textures[imageIndex];
}
public void draw(Graphics g){
if(image != null)
g.drawImage(image, xPos - 12, yPos - 12, null);
else{
g.setColor(new Color(0, 225, 0));
for(int i = yPos - 11; i <= yPos + 12; i+=5)
g.drawLine(xPos - 12, i, xPos + 12, i);
for(int i = xPos - 11; i <= xPos + 12; i+=5)
g.drawLine(i, yPos - 12, i, yPos + 12);
g.setColor(new Color(0, 128, 0));
for(int i = yPos - 10; i <= yPos + 12; i+=5)
g.drawLine(xPos - 12, i, xPos + 12, i);
for(int i = xPos - 10; i <= xPos + 12; i+=5)
g.drawLine( i, yPos - 12, i, yPos + 12);
}
if(!Type.equals("river") && !Type.equals("grass") && !Type.equals("base"))
gameModel.removeActor(this);
}
public int getxPos(){
return xPos;
}
public int getyPos(){
return yPos;
}
public String getType(){
return Type;
}
}
代码挺多的。。。。有兴趣的小伙伴直接找我探讨吧



