home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 July / VPR0007A.BIN / OLS / PAPIJUMP / papijump.lzh / script / gamestart.c < prev   
C/C++ Source or Header  |  1999-09-15  |  5KB  |  204 lines

  1.  
  2. // パピヨット君ジャンプしまくりゲーム (yaneurao GameScript2000β4用)
  3. // Copyright (c)1999 SUNFLAT
  4.  
  5. include "script/font.h"
  6.  
  7. // 定数のつもり
  8. long BLOCK_NUM; // ブロックの数
  9. long PAPI_W,PAPI_H,BLOCK_W,BLOCK_H; // 大きさの半分
  10. long JUMP_POWER; // ジャンプ力
  11. long DIFFICULTY; // 難易度上昇係数
  12.  
  13. // グローバル変数
  14. long papi_x,papi_y, papi_vx,papi_vy; // パピヨット君
  15. long block_x[24],block_y[24]; // ブロック
  16. long screen_y; // 画面下端のy座標
  17. long next_block_y; // 次に配置するブロックのy座標
  18. long score,hiscore; // スコア
  19. long bFullscreen; // フルスクリーンか?
  20.  
  21. // 最初に呼ばれる
  22. void main()
  23. {
  24.     // 定数(にしたいんだけど..)
  25.     BLOCK_NUM=24;
  26.     PAPI_W=24; PAPI_H=24; BLOCK_W=54/2; BLOCK_H=8;
  27.     JUMP_POWER=20;
  28.     DIFFICULTY=16384;
  29.     
  30.     // ディスプレイモード
  31.     SetDisplayMode(0,1);
  32.     bFullscreen=1; // 0:Window 1:フルスクリーン
  33.     ChangeDisplayMode(bFullscreen+1);
  34.     SetFPS(30);
  35.     
  36.     // リソース読み込み
  37.     LoadBitmap("resource/papi.bmp",0,1);
  38.     SetColorKeyPos(0,0,0);
  39.     LoadBitmap("resource/block.bmp",1,1);
  40.     SetColorKeyPos(1,0,0);
  41.     LoadBitmap("resource/font.bmp",2,1);
  42.     SetColorKeyPos(2,0,0);
  43.     LoadBitmap("resource/haikei.bmp",3,1);
  44.     RealizePalette(0);
  45.     fontSet(2);
  46.  
  47.     LoadWave("resource/jump.wav",0);
  48.     LoadWave("resource/fall.wav",1);
  49.     
  50.     // フラグ読み込み
  51.     if (LoadGameFlag("flags.dat")) ResetGameFlag();
  52.     hiscore=gameflag[0];
  53.     
  54.     loop gameMain();
  55. }
  56.  
  57. // ゲームを実行
  58. void gameMain()
  59. {
  60.     long i,a,b;
  61.  
  62.     score=0;
  63.     screen_y=0;
  64.     papi_x=320 ; papi_y=100; papi_vx=0; papi_vy=-10;
  65.  
  66.     // 初期ブロック
  67.     next_block_y=papi_y-PAPI_H-8;
  68.     block_x[0]=papi_x; block_y[0]=next_block_y;
  69.     
  70.     for(i=1;i<BLOCK_NUM;i++){
  71.         next_block_y=next_block_y+20;
  72.         block_x[i]=Rand(640-BLOCK_W*2)+BLOCK_W;
  73.         block_y[i]=next_block_y;
  74.     }
  75.     
  76.     // ゲームスタート
  77.     for(i=0;i<40;i++){
  78.         gameRender();
  79.         if ((i/5)&1) fontRenderR(320-16*10,200,"GAME START",2<<16,2<<16);
  80.         halt;
  81.         KeyInput(); keyCheck();
  82.     }
  83.     
  84.     // ゲームメイン
  85.     loop {
  86.         // 画面描画
  87.         gameRender();
  88.         halt;
  89.         
  90.         //    キー入力
  91.         KeyInput(); keyCheck();
  92.         if (IsPressLeftKey())  papi_vx--;
  93.         if (IsPressRightKey()) papi_vx++;
  94.         
  95.         // 当たり判定とか
  96.         b=0;
  97.         for(i=0;i<BLOCK_NUM;i++){
  98.             a=block_y[i]+PAPI_H;
  99.             if ((block_x[i]-BLOCK_W<papi_x+PAPI_W)
  100.                 && (papi_x-PAPI_W<block_x[i]+BLOCK_W)
  101.                 && (papi_y>=a) && (papi_y+papi_vy<a))
  102.             {
  103.                 if (a>b) b=a;
  104.             }
  105.         }
  106.         if (b){
  107.             // ジャンプ!!
  108.             papi_y=b;
  109.             papi_vy=JUMP_POWER;
  110.             PlayWave(0);
  111.         }
  112.  
  113.         // パピヨット君を移動させる
  114.         papi_x=(papi_x+papi_vx); papi_y=papi_y+papi_vy; // 移動
  115.         if (papi_x<-PAPI_W) papi_x=640+PAPI_W;
  116.         if (papi_x>640+PAPI_W) papi_x=-PAPI_W;
  117.         if (papi_y-screen_y+PAPI_H<0) break; // ゲームオーバー
  118.         papi_vy--; // 重力かける
  119.         
  120.         // スクロール
  121.         if (papi_y-screen_y>350) {
  122.             a=papi_y-350;
  123.             // スクロールした量によって得点get
  124.             score=score+(a-screen_y);
  125.             screen_y=a;
  126.         }
  127.         
  128.         // ブロックが画面下に出たら画面上に移動
  129.         for(i=0;i<BLOCK_NUM;i++){
  130.             if (block_y[i]-screen_y<0){
  131.                 a=JUMP_POWER*(JUMP_POWER+1)/2; // 幅の最大値
  132.                 a=a+0-((a-20)*DIFFICULTY)/(screen_y+DIFFICULTY); // 幅を適当に決める
  133.                 next_block_y=next_block_y+a;
  134.                 block_x[i]=Rand(640-BLOCK_W*2)+BLOCK_W;
  135.                 block_y[i]=next_block_y;
  136.             }
  137.         }
  138.     }
  139.     
  140.     // ゲームオーバー
  141.     PlayWave(1);
  142.     
  143.     if (hiscore<score) {
  144.         // ハイスコアをフラグに入れて保存
  145.         gameflag[0]=score;
  146.         SaveGameFlag("flags.dat");
  147.     }
  148.     
  149.     loop{
  150.         // 画面描画
  151.         gameRender();
  152.         fontRenderR(320-24*9,200,"GAME OVER",3<<16,2<<16);
  153.         fontRender(320-8*25,260,"PUSH SPACE KEY TO RESTART");
  154.         if (hiscore<score) fontRenderR(320-16*12,340,"HIGH SCORE!!",2<<16,2<<16);
  155.         halt;
  156.         
  157.         // 落ちるぅ~
  158.         papi_y=papi_y+papi_vy;
  159.         screen_y=screen_y+papi_vy;
  160.         if (papi_vy>-70) papi_vy--;
  161.         
  162.         KeyInput(); keyCheck();
  163.         if (IsPushSpaceKey()) break;
  164.     }
  165.     
  166.     if (hiscore<score) hiscore=score;
  167. }
  168.  
  169. // ゲーム画面の描画
  170. void gameRender()
  171. {
  172.     int i,j;
  173.     
  174.     // 背景
  175.     for(i=(screen_y*2/3)%256-256;i<480;i=i+256)
  176.         for(j=0;j<640;j=j+256)
  177.             BltFast(3,j,i);
  178.     
  179.     // ブロック描きまくり
  180.     for(i=0;i<BLOCK_NUM;i++)
  181.         Blt(1,block_x[i]-BLOCK_W,480-(block_y[i]-screen_y)-BLOCK_H);
  182.  
  183.     // パピヨット君描く
  184.     Blt(0,papi_x-PAPI_W,480-(papi_y-screen_y)-PAPI_H);
  185.     
  186.     // スコア表示
  187.     sprintf2(string[0],"SCORE %05d     HIGH SCORE %05d",score,hiscore);
  188.     fontRender(320-32*8,8,string[0]);
  189. }
  190.  
  191. // 特殊キーチェック
  192. void keyCheck()
  193. {
  194.     if (IsPushEscKey()) Quit(); // Esc
  195.     
  196.     if (IsPressKey(0xB8)|IsPressKey(0x38)){ // Alt
  197.         if (IsPushKey(0x1c)) { // Alt+Enter
  198.             bFullscreen=1-bFullscreen;;
  199.             ChangeDisplayMode(bFullscreen+1);
  200.         }
  201.         if (IsPushKey(0x3E)) Quit(); // Alt+F4
  202.     }
  203. }
  204.