home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2000 July
/
VPR0007A.BIN
/
OLS
/
PAPIJUMP
/
papijump.lzh
/
script
/
gamestart.c
< prev
Wrap
C/C++ Source or Header
|
1999-09-15
|
5KB
|
204 lines
// パピヨット君ジャンプしまくりゲーム (yaneurao GameScript2000β4用)
// Copyright (c)1999 SUNFLAT
include "script/font.h"
// 定数のつもり
long BLOCK_NUM; // ブロックの数
long PAPI_W,PAPI_H,BLOCK_W,BLOCK_H; // 大きさの半分
long JUMP_POWER; // ジャンプ力
long DIFFICULTY; // 難易度上昇係数
// グローバル変数
long papi_x,papi_y, papi_vx,papi_vy; // パピヨット君
long block_x[24],block_y[24]; // ブロック
long screen_y; // 画面下端のy座標
long next_block_y; // 次に配置するブロックのy座標
long score,hiscore; // スコア
long bFullscreen; // フルスクリーンか?
// 最初に呼ばれる
void main()
{
// 定数(にしたいんだけど..)
BLOCK_NUM=24;
PAPI_W=24; PAPI_H=24; BLOCK_W=54/2; BLOCK_H=8;
JUMP_POWER=20;
DIFFICULTY=16384;
// ディスプレイモード
SetDisplayMode(0,1);
bFullscreen=1; // 0:Window 1:フルスクリーン
ChangeDisplayMode(bFullscreen+1);
SetFPS(30);
// リソース読み込み
LoadBitmap("resource/papi.bmp",0,1);
SetColorKeyPos(0,0,0);
LoadBitmap("resource/block.bmp",1,1);
SetColorKeyPos(1,0,0);
LoadBitmap("resource/font.bmp",2,1);
SetColorKeyPos(2,0,0);
LoadBitmap("resource/haikei.bmp",3,1);
RealizePalette(0);
fontSet(2);
LoadWave("resource/jump.wav",0);
LoadWave("resource/fall.wav",1);
// フラグ読み込み
if (LoadGameFlag("flags.dat")) ResetGameFlag();
hiscore=gameflag[0];
loop gameMain();
}
// ゲームを実行
void gameMain()
{
long i,a,b;
score=0;
screen_y=0;
papi_x=320 ; papi_y=100; papi_vx=0; papi_vy=-10;
// 初期ブロック
next_block_y=papi_y-PAPI_H-8;
block_x[0]=papi_x; block_y[0]=next_block_y;
for(i=1;i<BLOCK_NUM;i++){
next_block_y=next_block_y+20;
block_x[i]=Rand(640-BLOCK_W*2)+BLOCK_W;
block_y[i]=next_block_y;
}
// ゲームスタート
for(i=0;i<40;i++){
gameRender();
if ((i/5)&1) fontRenderR(320-16*10,200,"GAME START",2<<16,2<<16);
halt;
KeyInput(); keyCheck();
}
// ゲームメイン
loop {
// 画面描画
gameRender();
halt;
// キー入力
KeyInput(); keyCheck();
if (IsPressLeftKey()) papi_vx--;
if (IsPressRightKey()) papi_vx++;
// 当たり判定とか
b=0;
for(i=0;i<BLOCK_NUM;i++){
a=block_y[i]+PAPI_H;
if ((block_x[i]-BLOCK_W<papi_x+PAPI_W)
&& (papi_x-PAPI_W<block_x[i]+BLOCK_W)
&& (papi_y>=a) && (papi_y+papi_vy<a))
{
if (a>b) b=a;
}
}
if (b){
// ジャンプ!!
papi_y=b;
papi_vy=JUMP_POWER;
PlayWave(0);
}
// パピヨット君を移動させる
papi_x=(papi_x+papi_vx); papi_y=papi_y+papi_vy; // 移動
if (papi_x<-PAPI_W) papi_x=640+PAPI_W;
if (papi_x>640+PAPI_W) papi_x=-PAPI_W;
if (papi_y-screen_y+PAPI_H<0) break; // ゲームオーバー
papi_vy--; // 重力かける
// スクロール
if (papi_y-screen_y>350) {
a=papi_y-350;
// スクロールした量によって得点get
score=score+(a-screen_y);
screen_y=a;
}
// ブロックが画面下に出たら画面上に移動
for(i=0;i<BLOCK_NUM;i++){
if (block_y[i]-screen_y<0){
a=JUMP_POWER*(JUMP_POWER+1)/2; // 幅の最大値
a=a+0-((a-20)*DIFFICULTY)/(screen_y+DIFFICULTY); // 幅を適当に決める
next_block_y=next_block_y+a;
block_x[i]=Rand(640-BLOCK_W*2)+BLOCK_W;
block_y[i]=next_block_y;
}
}
}
// ゲームオーバー
PlayWave(1);
if (hiscore<score) {
// ハイスコアをフラグに入れて保存
gameflag[0]=score;
SaveGameFlag("flags.dat");
}
loop{
// 画面描画
gameRender();
fontRenderR(320-24*9,200,"GAME OVER",3<<16,2<<16);
fontRender(320-8*25,260,"PUSH SPACE KEY TO RESTART");
if (hiscore<score) fontRenderR(320-16*12,340,"HIGH SCORE!!",2<<16,2<<16);
halt;
// 落ちるぅ~
papi_y=papi_y+papi_vy;
screen_y=screen_y+papi_vy;
if (papi_vy>-70) papi_vy--;
KeyInput(); keyCheck();
if (IsPushSpaceKey()) break;
}
if (hiscore<score) hiscore=score;
}
// ゲーム画面の描画
void gameRender()
{
int i,j;
// 背景
for(i=(screen_y*2/3)%256-256;i<480;i=i+256)
for(j=0;j<640;j=j+256)
BltFast(3,j,i);
// ブロック描きまくり
for(i=0;i<BLOCK_NUM;i++)
Blt(1,block_x[i]-BLOCK_W,480-(block_y[i]-screen_y)-BLOCK_H);
// パピヨット君描く
Blt(0,papi_x-PAPI_W,480-(papi_y-screen_y)-PAPI_H);
// スコア表示
sprintf2(string[0],"SCORE %05d HIGH SCORE %05d",score,hiscore);
fontRender(320-32*8,8,string[0]);
}
// 特殊キーチェック
void keyCheck()
{
if (IsPushEscKey()) Quit(); // Esc
if (IsPressKey(0xB8)|IsPressKey(0x38)){ // Alt
if (IsPushKey(0x1c)) { // Alt+Enter
bFullscreen=1-bFullscreen;;
ChangeDisplayMode(bFullscreen+1);
}
if (IsPushKey(0x3E)) Quit(); // Alt+F4
}
}