亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? game.cpp

?? 超級瑪麗經典小游戲源碼,供大家參考學習.
?? CPP
字號:
//-----------------------------------------------------------------------------
//
// Copyright (C) July 24, 2000 by Zhang Yong
// Email: z-meng@yeah.net
// This source is available for distribution and/or modification
// only under the terms of the GPL license.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the GPL.txt for more details.
//
//-----------------------------------------------------------------------------


#include "sprite.h"
#include "plane.h"
#include "sound.h"
#include "input.h"
#include <stdio.h>
#include <stdlib.h>
#include "mytime.h"


CBitmap		g_bmTile;
CBitmap		g_bmPlayer;
CBitmap		g_bmGhost;
CBitmap		g_bmTurtle;
CBitmap		g_bmCoin;
CBitmap		g_bmMushroom;
CBitmap		g_bmDebris;
CBitmap		g_bmBullet;
CBitmap		g_bmExplode;
CBitmap		g_bmFlower;

CPlane		g_plane;
CPlayer		g_player;
CSpriteList	g_sprites;

CInput		g_input;

BOOL		g_bPaused;
BOOL		g_bShowStats;
int			g_level;
BOOL		g_darken;
CTime		g_lasttime;


void TRACE( char *format, ... );
void SetPalette( PALETTEENTRY ape[] );
void ClearBackground();
void OutputText( int x, int y, char *text );
void FlipScreen();

/*
 * LoadPalette
 *
 * Create a DirectDrawPalette from a palette file
 *
 * if the palette files cant be found, make a default 332 palette
 */
BOOL LoadPalette( char *fname, PALETTEENTRY ape[] )
{
	FILE *fp;
	
    struct  {
        DWORD           dwRiff;
        DWORD           dwFileSize;
        DWORD           dwPal;
        DWORD           dwData;
        DWORD           dwDataSize;
        WORD            palVersion;
        WORD            palNumEntries;
    }   header;

    header.dwRiff = 0;

    if( fname )
    {
        fp = fopen( fname, "rb" );

        if( fp )
            fread( &header, sizeof(header), 1, fp );
    }

    /*
     * if the file is not a palette file, or does not exist
     * default to a 332 palette
     */
    if (header.dwRiff != 0x46464952 || // 'RIFF'
        header.dwPal  != 0x204C4150 || // 'PAL '
        header.dwData != 0x61746164 || // 'data'
        header.palVersion != 0x0300 ||
        header.palNumEntries > 256  ||
        header.palNumEntries < 1)
    {
        TRACE( "Can't open palette file, using default 332." );

        for( int i = 0; i < 256; i++ )
        {
            ape[i].peRed   = (BYTE)(((i >> 5) & 0x07) * 255 / 7);
            ape[i].peGreen = (BYTE)(((i >> 2) & 0x07) * 255 / 7);
            ape[i].peBlue  = (BYTE)(((i >> 0) & 0x03) * 255 / 3);
            ape[i].peFlags = (BYTE)0;
        }
		return FALSE;
    }

	fread( ape, sizeof(PALETTEENTRY), 256, fp );
	fclose( fp );

	return TRUE;

} /* LoadPalette */



void PauseGame()
{
	g_bPaused = !g_bPaused;
	if( g_bPaused )
	{
#ifdef _WIN32
		PauseMidi();
#endif
	}
	else
	{
#ifdef _WIN32
		ResumeMidi();
#endif
		g_lasttime.GetTime();
	}
}




const float PLAYER_STARTX = 64;
const float PLAYER_STARTY = 383;


BOOL InitLevel( BOOL reinit )
{
	g_sprites.Destroy();
	
	// open map file
	char filename[64];
	sprintf( filename, "level/level%d.dat", g_level );
	FILE *fp = fopen( filename, "ra" );
	if( !fp )
	{
		g_level = 1;
		sprintf( filename, "level/level%d.dat", g_level );
		fp = fopen( filename, "ra" );
		if( !fp )
			return FALSE;
	}

	// see if the scene is darken
	fscanf( fp, "%d", &g_darken );

	// create plane
	g_plane.Create( fp, &g_bmTile );

	// read ghost data...
	int num, x, y, i;
	
	fscanf( fp, "%d", &num );		// ghost
	for( i = 0; i < num; i ++ )
	{
		fscanf( fp, "%d", &x );
		fscanf( fp, "%d", &y );
		AddGhost( (float)x, (float)y );
	}

	fscanf( fp, "%d", &num );		// walking turtle
	for( i = 0; i < num; i ++ )
	{
		fscanf( fp, "%d", &x );
		fscanf( fp, "%d", &y );
		AddTurtle( WALKTURTLE, (float)x, (float)y );
	}

	fscanf( fp, "%d", &num );		// flying turtle
	for( i = 0; i < num; i ++ )
	{
		fscanf( fp, "%d", &x );
		fscanf( fp, "%d", &y );
		AddTurtle( FLYTURTLE, (float)x, (float)y );
	}

	fclose( fp );

	
	// reset player
	if( reinit )
	{
		g_player.m_type = 0;		// child
		g_player.m_width = 32;
		g_player.m_height = 32;
		g_player.m_hasbullet = FALSE;
	}
	g_player.m_x = PLAYER_STARTX;
	g_player.m_y = PLAYER_STARTY;
	if( g_player.m_type == 1 )
		g_player.m_y -= 32;

	g_player.m_xv = g_player.m_yv = 0;
	g_player.m_xa = g_player.m_ya = 0;
	g_player.m_onground = TRUE;
	g_player.m_shield = FALSE;
	g_player.SetAction( STILL, RIGHT );

	// Set Palette
	PALETTEENTRY ape[256];
	if( !g_darken )
		LoadPalette( "bright.pal", ape );
	else
		LoadPalette( "darken.pal", ape );
	SetPalette( ape );

#ifdef _WIN32
	if( !g_darken )
		PlayMidi( "sound/back1.mid" );
	else
		PlayMidi( "sound/back2.mid" );
#endif
	return TRUE;
}



BOOL InitGame()
{
	g_input.Create();

	// init player
	g_player.Create( 0, PLAYER_STARTX, PLAYER_STARTY, 32, 32, 14, &g_bmPlayer );
	g_player.BitBlt( STILL, RIGHT );
	g_player.BitBlt( WALK, RIGHT );
	g_player.BitBlt( WALK, RIGHT );
	g_player.BitBlt( WALK, RIGHT );
	g_player.BitBlt( STOP, RIGHT );
	g_player.BitBlt( JUMP, RIGHT );
	g_player.BitBlt( DEAD, RIGHT );
	g_player.BitBlt( SLIDE, RIGHT );
	g_player.BitBlt( STILL, LEFT );
	g_player.BitBlt( WALK, LEFT );
	g_player.BitBlt( WALK, LEFT );
	g_player.BitBlt( WALK, LEFT );
	g_player.BitBlt( STOP, LEFT );
	g_player.BitBlt( JUMP, LEFT );

	return InitLevel( TRUE );
}


BOOL LoadBitmaps()
{
	g_bmTile.Load( "graphics/tile.bmp" );
	g_bmPlayer.Load( "graphics/player.bmp" );
	g_bmCoin.Load( "graphics/coin.bmp" );
	g_bmMushroom.Load( "graphics/mushroom.bmp" );
	g_bmDebris.Load( "graphics/debris.bmp" );
	g_bmGhost.Load( "graphics/ghost.bmp" );
	g_bmTurtle.Load( "graphics/turtle.bmp" );
	g_bmBullet.Load( "graphics/bullet.bmp" );
	g_bmExplode.Load( "graphics/explode.bmp" );
	g_bmFlower.Load( "graphics/flower.bmp" );

	return TRUE;
}


#ifdef _WIN32
void ReleaseBitmaps()
{
	g_bmTile.Release();
	g_bmPlayer.Release();
	g_bmCoin.Release();
	g_bmMushroom.Release();
	g_bmDebris.Release();
	g_bmGhost.Release();
	g_bmTurtle.Release();
	g_bmBullet.Release();
	g_bmExplode.Release();
	g_bmFlower.Release();
}

void RestoreBitmaps()
{
	g_bmTile.Restore( "graphics\\tile.bmp" );
	g_bmPlayer.Restore( "graphics\\player.bmp" );
	g_bmCoin.Restore( "graphics\\coin.bmp" );
	g_bmMushroom.Restore( "graphics\\mushroom.bmp" );
	g_bmDebris.Restore( "graphics\\debris.bmp" );
	g_bmGhost.Restore( "graphics\\ghost.bmp" );
	g_bmTurtle.Restore( "graphics\\turtle.bmp" );
	g_bmBullet.Restore( "graphics\\bullet.bmp" );
	g_bmExplode.Restore( "graphics\\explode.bmp" );
	g_bmFlower.Restore( "graphics\\flower.bmp" );
}
#endif



void ProcessInput( float time )
{
	BYTE input;
	g_input.GetKey( input );

	g_player.Move( time, input );


	CSprite *save;
	for( CSprite *sprite=g_sprites.m_head; sprite; sprite = save )
	{
		save = sprite->m_next;
		
		// see if ghost can now started?
		if( !sprite->m_active && sprite->m_x < g_player.m_x + 640 )
			sprite->m_active = TRUE;
		
		sprite->Move( time );
		if( sprite->m_active &&	
			(sprite->m_y + sprite->m_height < 0 ||
			sprite->m_y > 480 || sprite->m_x < 0 ||
			sprite->m_x < g_plane.m_x - 640 ||
			sprite->m_x > g_plane.m_x + 1280 ||
			sprite->m_x > g_plane.m_width*TILE_W) )
		{
			// if ghost is too faraway from us, delete it
			g_sprites.Delete( sprite );
		}
	}

	// see if player is dead
	if( g_player.m_action == DEAD && g_player.m_y > 480 )
		InitLevel( TRUE );

	// if we go through the level
	if( g_player.m_x > g_plane.m_width*TILE_W )
	{
		g_level ++;
		InitLevel( FALSE );
	}
}


void ShowFPS()
{
	static int frame;
	static float fps;
	static CTime lasttime;

	frame ++;
	CTime thistime;
	thistime.GetTime();
	float time = thistime - lasttime;
	if( time > 1 )
	{
		fps = frame / time;
		frame = 0;
		lasttime = thistime;
	}
	
	if( g_bShowStats )
	{
		char buf[255];
		sprintf( buf, "FPS: %.2f", fps );
		OutputText( 10, 10, buf );
	}
}


void UpdateFrame()
{
	CTime thistime;
	thistime.GetTime();
	float time = thistime - g_lasttime;
	g_lasttime = thistime;
	if( time > 0.05f )
		time = 0.05f;
	
	ProcessInput( time );
	
	ClearBackground();

	g_plane.Draw();

	int planex = g_plane.m_x;

	for( CSprite *sprite=g_sprites.m_head; sprite; sprite = sprite->m_next )
		sprite->Draw( planex );

	g_player.Draw( planex );

	ShowFPS();
	FlipScreen();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色爱av资源综合区| 久久天天做天天爱综合色| 欧美日韩五月天| 欧美一二三在线| 国产精品免费久久| 天天色天天爱天天射综合| 亚洲午夜在线电影| 午夜电影网一区| 精品国产一区二区三区av性色| 欧美国产日韩亚洲一区| 亚洲综合在线视频| 成人免费看的视频| 9191久久久久久久久久久| 国产日产欧美一区| 国产在线日韩欧美| 欧美色倩网站大全免费| 亚洲免费在线视频| 国产大片一区二区| 日韩女优制服丝袜电影| 亚洲综合一区二区三区| 国产精品99久久久| 欧美一卡二卡在线| 亚洲成人一区二区在线观看| 秋霞av亚洲一区二区三| 在线观看一区日韩| 中文字幕中文乱码欧美一区二区| 麻豆精品蜜桃视频网站| 在线看国产一区| 国产精品理论在线观看| 久久国产精品99精品国产| 欧美婷婷六月丁香综合色| 国产精品视频一区二区三区不卡| 久久66热re国产| 欧美不卡一区二区| 蜜臀av一区二区在线观看| 日韩精品一区二区在线观看| 日韩国产欧美在线播放| www.av亚洲| 亚洲人成亚洲人成在线观看图片| 风间由美一区二区三区在线观看 | 国产欧美精品一区| 精品一区中文字幕| 国产日韩欧美综合在线| 国产一区美女在线| 日韩丝袜情趣美女图片| 日韩精品乱码免费| 色婷婷av一区二区三区大白胸| 中文字幕av一区 二区| 国产精品自拍毛片| 日韩伦理电影网| 91丝袜国产在线播放| 一区在线中文字幕| 久久久久久久久久久黄色| 久久久一区二区三区捆绑**| 天天色综合成人网| 欧美日韩色一区| 亚洲国产欧美另类丝袜| 色999日韩国产欧美一区二区| 国产亚洲欧美激情| 亚洲图片欧美视频| 国产麻豆精品在线观看| 色一区在线观看| 国产色一区二区| 日韩精品一级中文字幕精品视频免费观看| 成人不卡免费av| 亚洲国产aⅴ成人精品无吗| 欧美日韩成人一区| 婷婷六月综合网| 国产亚洲欧美激情| 日本精品视频一区二区| 久久91精品国产91久久小草| 国产欧美视频一区二区| 欧美色图免费看| 久久丁香综合五月国产三级网站| 一本一本大道香蕉久在线精品 | 91日韩精品一区| 五月天亚洲婷婷| 欧美大片一区二区| 成人福利视频网站| 午夜精品视频一区| 久久女同性恋中文字幕| 国产老肥熟一区二区三区| 国产亚洲成年网址在线观看| 91福利精品第一导航| 男女视频一区二区| 一卡二卡欧美日韩| 久久九九99视频| 日本精品视频一区二区| 懂色av中文一区二区三区| 一区二区三区在线观看欧美| 欧美激情一区二区三区四区| 欧美三级电影网站| 91影视在线播放| 毛片av一区二区三区| 欧美经典一区二区| 欧美成人猛片aaaaaaa| 91性感美女视频| 成人综合在线观看| 蜜臀av在线播放一区二区三区| 亚洲男同性恋视频| 国产午夜亚洲精品理论片色戒 | 日韩美女久久久| 精品久久久影院| 欧美在线不卡视频| 97精品电影院| 国产成人午夜高潮毛片| 亚洲免费在线播放| 国产人久久人人人人爽| 日韩精品综合一本久道在线视频| 日本精品免费观看高清观看| 国产成人午夜视频| 国产一区在线视频| 同产精品九九九| 亚洲一区在线视频观看| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美一区二区黄色| 欧美欧美午夜aⅴ在线观看| 风间由美一区二区三区在线观看 | 北岛玲一区二区三区四区| 免费xxxx性欧美18vr| 亚洲成av人片在线观看| 亚洲天堂成人在线观看| 26uuu久久天堂性欧美| 欧美二区在线观看| 欧美日韩免费在线视频| 欧美喷潮久久久xxxxx| 欧美日韩aaa| 欧美第一区第二区| 日韩精品专区在线| 亚洲综合av网| 日本不卡的三区四区五区| 视频在线在亚洲| 国产一区二区三区四| 精品一区二区精品| 成人av在线一区二区| 成人精品亚洲人成在线| 视频一区欧美精品| 国产精品1区2区| 成人免费三级在线| 欧美色涩在线第一页| 制服丝袜国产精品| 日韩美女在线视频| 久久久亚洲精华液精华液精华液| 国产亚洲一区字幕| 国产精品女人毛片| 一区二区高清免费观看影视大全| 国产欧美一区二区精品性色超碰| 色8久久人人97超碰香蕉987| 97精品电影院| 91在线视频免费91| 捆绑变态av一区二区三区| 麻豆精品一区二区av白丝在线| 国产精品免费网站在线观看| 亚洲视频一二三| 亚洲女人****多毛耸耸8| 久久综合九色综合欧美就去吻 | 99久久国产综合精品女不卡| 久久er99热精品一区二区| 欧美日韩aaa| 成人18视频在线播放| 日产欧产美韩系列久久99| 亚洲欧美国产毛片在线| 亚洲精品国产视频| 国产日产亚洲精品系列| 56国语精品自产拍在线观看| 日韩亚洲欧美成人一区| 欧美国产一区二区在线观看| 亚洲一区视频在线观看视频| 亚洲免费观看在线观看| 亚洲成人一区二区在线观看| 麻豆91在线看| 成人黄色小视频在线观看| 国产ts人妖一区二区| 亚洲a一区二区| 国产精品福利影院| 亚洲一区二区三区视频在线| 亚洲第一成人在线| 蜜芽一区二区三区| 国产高清在线精品| 欧美另类z0zxhd电影| www国产精品av| 亚洲人吸女人奶水| 日韩电影在线一区| jvid福利写真一区二区三区| 欧美日本视频在线| 国产亚洲欧美日韩俺去了| 亚洲一区二区三区国产| av在线免费不卡| 久久一二三国产| 国内精品免费**视频| 欧美日韩和欧美的一区二区| 精品国产3级a| 久久成人综合网| 在线精品视频免费播放| 一区二区三区蜜桃网| 成人午夜视频福利| 国产精品久久久爽爽爽麻豆色哟哟 | 久久蜜桃香蕉精品一区二区三区| 日韩二区三区四区| 欧美美女直播网站|