Ignore:
Timestamp:
May 9, 2011, 6:23:05 PM (14 years ago)
Author:
dportnoy <devnull@…>
Branches:
master
Children:
bdd63ba
Parents:
ae564dc
Message:

Implemented saving/loading of the map and the units on it. Also did some package refactoring (renamed com.medievaltech.game to com.medievaltech.unit and moved some classes into com.medievaltech.advancewars)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/com/medievaltech/advancewars/GameView.java

    rae564dc r113d7cf  
    11package com.medievaltech.advancewars;
    22
    3 import com.medievaltech.game.*;
     3import java.io.*;
     4
     5import com.medievaltech.advancewars.Tile.TerrainType;
     6import com.medievaltech.unit.*;
    47import com.medievaltech.gui.*;
    58
     
    1215import android.widget.TextView;
    1316
    14 /**
    15  * View that draws, takes keystrokes, etc. for a simple LunarLander game.
    16  *
    17  * Has a mode which RUNNING, PAUSED, etc. Has a x, y, dx, dy, ... capturing the
    18  * current ship physics. All x/y etc. are measured with (0,0) at the lower left.
    19  * updatePhysics() advances the physics based on realtime. draw() renders the
    20  * ship, and does an invalidate() to prompt another draw() as soon as possible
    21  * by the system.
    22  */
    2317class GameView extends SurfaceView implements SurfaceHolder.Callback {
    2418       
     
    3933        private int mCanvasHeight = 1;
    4034        private int mCanvasWidth = 1;
    41         public int mPlayerWins = 0, mPlayerLosses = 0;
    4235
    4336        /** Message handler used by thread to interact with TextView */
     
    5144                mUnitPaint;
    5245       
    53         private Map mMap;
     46        //maybe make this private and make an accessor for it
     47        public Map mMap;
     48       
     49        public Tile grassTile, oceanTile;
    5450
    5551        /** Indicate whether the surface has been created & is ready to draw */
     
    5955        private SurfaceHolder mSurfaceHolder;
    6056       
    61         private com.medievaltech.gui.Window wndMainMenu, wndBattleMap;
     57        private com.medievaltech.gui.Window wndMainMenu;
    6258        private Unit selectedUnit;
    6359       
     
    6662            mSurfaceHolder = surfaceHolder;
    6763            mHandler = handler;
    68             mContext = context;
    6964           
    7065            mLinePaint = new Paint();
     
    107102            wndMainMenu.addGUIObject("btnQuit", new Button("Quit", 100, 195, 120, 20, mLinePaint, mButtonPaint));
    108103           
    109             Tile grassTile = new Tile(mTilePaint1);
    110             Tile oceanTile = new Tile(mTilePaint2);
     104            grassTile = new Tile(mTilePaint1, TerrainType.LAND);
     105            oceanTile = new Tile(mTilePaint2, TerrainType.SEA);
    111106           
    112107            mMap = new Map(grassTile, 6, 8, new Point(10, 25));
     
    336331        private void doDraw(Canvas canvas) {
    337332                canvas.drawColor(Color.BLACK);
    338                
    339                 String text;
    340                 Paint.FontMetrics metrics = mTextPaint.getFontMetrics();
    341333               
    342334                switch(mGameState) {
     
    380372    }
    381373
    382     /** Handle to the application context, used to e.g. fetch Drawables. */
    383     private Context mContext;
    384 
    385374    /** Pointer to the text view to display "Paused.." etc. */
    386375    private TextView mStatusText;
     
    421410                                thread.mGameState = GameState.BATTLE_MAP;
    422411                        }else if(thread.wndMainMenu.getGUIObject("btnLoadGame").isClicked(event.getX(), event.getY())) {
     412                                BufferedReader b;
     413                        try {
     414                                b = new BufferedReader(new FileReader(android.os.Environment.getExternalStorageDirectory()+"/save.txt"));
     415                               
     416                                int width = Integer.parseInt(b.readLine());
     417                                int height = Integer.parseInt(b.readLine());
     418                               
     419                                String offset = b.readLine();
     420                                Log.i("GameSave", offset);
     421                                int offsetX = Integer.parseInt(offset.substring(0, offset.indexOf("x")));
     422                                int offsetY = Integer.parseInt(offset.substring(offset.indexOf("x")+1));
     423                               
     424                                thread.mMap = new Map(thread.grassTile, width, height, new Point(offsetX, offsetY));
     425                               
     426                                Log.i("GameSave", "Created the map");
     427                               
     428                                for(int x=0; x<width; x++) {
     429                                        String line = b.readLine();
     430                                        Log.i("GameSave", line);
     431                                        String[] arr = line.split(",");
     432                                        for(int y=0; y<arr.length; y++) {
     433                                                TerrainType type = TerrainType.values()[Integer.parseInt(arr[y])];
     434                                                if(type.equals(TerrainType.LAND))
     435                                                        thread.mMap.setTile(x, y, new Tile(thread.grassTile, new Point(10, 25)));
     436                                                else
     437                                                        thread.mMap.setTile(x, y, new Tile(thread.oceanTile, new Point(10, 25)));
     438                                        }
     439                                }
     440                               
     441                                while(b.ready()) {
     442                                        String unit = b.readLine();
     443                                        Log.i("GameSave", unit);
     444                                        int x = Integer.parseInt(unit.substring(0, unit.indexOf(",")));
     445                                        int y = Integer.parseInt(unit.substring(unit.indexOf(",")+1));
     446                                       
     447                                        mGame.mThread.mMap.getTile(x, y).addUnit(new Soldier(mGame.mThread.mUnitPaint));
     448                                }
     449                               
     450                                b.close();
     451                        }catch(IOException ioe) {
     452                                ioe.printStackTrace();
     453                        }
    423454                                thread.mGameState = GameState.BATTLE_MAP;
    424455                        }else if(thread.wndMainMenu.getGUIObject("btnQuit").isClicked(event.getX(), event.getY())) {
Note: See TracChangeset for help on using the changeset viewer.