|
|
1.1 ! root 1: #import <appkit/View.h> ! 2: #import <dpsclient/dpsNeXT.h> ! 3: ! 4: // Maximum number of tiles in the playing area... ! 5: ! 6: #define NUMTILESX 8 ! 7: #define NUMTILESY 20 ! 8: ! 9: #define NUMTILETYPES 2 // Number of different tile types. ! 10: ! 11: #define TILEHEIGHT 18.0 // Tile size, in pixels ! 12: #define TILEWIDTH 28.0 ! 13: #define INTERTILE 2.0 ! 14: ! 15: #define GAMEWIDTH ((TILEWIDTH+INTERTILE) * NUMTILESX) // Size of the field. ! 16: #define GAMEHEIGHT ((TILEHEIGHT+INTERTILE) * NUMTILESY) ! 17: ! 18: @interface BreakView:View ! 19: { ! 20: ! 21: int numTilesLeft, score, level, lives, highScore; ! 22: ! 23: BOOL gameRunning, demoMode, soundEnabled; ! 24: ! 25: DPSTimedEntry timer; ! 26: ! 27: double lastFrameTime; ! 28: ! 29: // The various pieces that know how to draw themselves on the field. ! 30: ! 31: id tile[NUMTILETYPES]; ! 32: ! 33: // The actual array of tiles on the field. tiles[x][y] is the id of the ! 34: // tile that is at location x * TILEWIDTH, y * TILEHEIGHT. ! 35: ! 36: short tiles[NUMTILESX][NUMTILESY]; ! 37: id ball, paddle, backGround; ! 38: ! 39: // The following six are outlets set when the nib file is being ! 40: // read in. ! 41: ! 42: // Views that display various info (these can be nil, in which case the ! 43: // corresponding info will just go to the bit bucket). ! 44: ! 45: id scoreView; ! 46: id livesView; ! 47: id levelView; ! 48: id hscoreView; ! 49: id statusView; ! 50: ! 51: id wallSound; ! 52: id tileSound; ! 53: id paddleSound; ! 54: id missSound; ! 55: ! 56: // Other ball & paddle params ! 57: float ballX, ballY, paddleX, paddleY, ballXVel, ballYVel, leftMargin; ! 58: ! 59: NXSize ballSize, paddleSize, tileSize; ! 60: ! 61: // These variables store the of the ball. Killer ball goes through tiles ! 62: // without bouncing; nice ball bounces from the top wall towards the paddle. ! 63: BOOL killerBall, niceBall; ! 64: ! 65: // Number of revolutions left if the ball is rotating. If zero or ! 66: // less, than the ball is not rotating... ! 67: float revolutionsLeft; ! 68: float revolutionSpeed; // Radians per millisecond if rotating ! 69: ! 70: } ! 71: ! 72: // The following methods can be called by Interface Builder objects & ! 73: // during creation/destruction of instances of BreakView. ! 74: ! 75: - initFrame:(const NXRect *)frm; ! 76: - free; ! 77: ! 78: - gotoFirstLevel:sender; // Essentially a "new game" ! 79: - gotoNextLevel:sender; // Doesn't have to be explicitly called by user ! 80: - setDemoMode:sender; // Connect to switch with binary state ! 81: - setSoundMode:sender; // Connect to switch with binary state ! 82: - go:sender; // mouseDown: on the view does the same thing ! 83: - stop:sender; ! 84: ! 85: - changeBackground:sender; ! 86: - revertBackground:sender; ! 87: ! 88: // Methods to get back status of game. ! 89: ! 90: - (int)score; ! 91: - (int)level; ! 92: - (int)lives; ! 93: ! 94: // The following methods are internal and probably should not be called ! 95: // by others. ! 96: ! 97: - setBackgroundFile:(const char *)fileName andRemember:(BOOL)remember; ! 98: - setHighScore:(int)hScore; ! 99: - getHighScore; ! 100: - resizePieces; ! 101: - resetBallAndPaddle; ! 102: - directBallAt:(NXPoint *)dest; ! 103: - drawSelf:(NXRect *)rects :(int)rectCount; ! 104: - drawBackground:(NXRect *)rect; ! 105: - eraseBall; ! 106: - erasePaddle; ! 107: - showBall; ! 108: - showPaddle; ! 109: - incrementGameScore:(int)scoreIncrement; ! 110: -(BOOL) hitTileAt:(int)x :(int)y; ! 111: - step:(double)timeNow; ! 112: -(BOOL)acceptsFirstMouse; ! 113: - (void)playSound:sound atXLoc:(float)xLoc; ! 114: ! 115: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.