ゲームプログラマになる前に覚えておきたい技術
http://www.shuwasystem.co.jp/support/7980html/2118.html
サンプルプログラムの荷物君にシーケンスをつけてみました。
http://www.geocities.jp/parallel_computer_inc/nimotsu.zip
gamelib.c
/* Nimotsu Kun for WSC by tanam [2017] WonderWitch replacement lib for Wonderswan without using WonderWitch hardware Use Turbo C 2.01 and WSXLib by zalas */ #include "wwwlib.h" #include "gamelib.h" #include "nimotsu.h" int stage, k; void init( void ){ wwc_set_color_mode(COLOR_MODE_4COLOR); wwc_palette_set_color(0, 0, 0x0000); /* black */ wwc_palette_set_color(0, 1, 0x0f00); /* red */ wwc_palette_set_color(0, 2, 0x00f0); /* green */ wwc_palette_set_color(0, 3, 0x000f); /* blue */ font_set_colordata(0,126, nimotsu_chr); display_control(DCM_SCR2); return; } void title( void ){ drawascii( gStageData[4], gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 17, screen); while (key_press_check() != KEY_START ) sys_wait(1); return; } int select( void ){ drawascii( gStageData[5], gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 17, screen); sys_wait(7); while (true) { k = key_press_check(); if (k==KEY_LEFT1) {gStageData[5][18 + stage]=' ';if (stage>0) stage--;} if (k==KEY_RIGHT1) {gStageData[5][18 + stage]=' ';if (stage<4) stage++;} gStageData[5][18 + stage]='v'; if (k==KEY_START) {gStageData[5][18 + stage]=' ';break;} drawascii( gStageData[5], gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 9, screen); if (stage<4) initialize( state, gStageData[stage] ); if (stage<4) draw( state, gStageWidth, gStageHeight ); if (stage<4) screen_set_char(SCREEN2, 0, 10, 9, 7, screen); sys_wait(7); } return stage; } void load( void ){ memset(screen, BLACK, 2048); drawascii( gStageData[6], gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 17, screen); sys_wait(70); return; } void clear( void ){ memset(screen, BLACK, 2048); drawascii( gStageData[7], gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 17, screen); sys_wait(70); return; } int main(){ /* 初期化 */ init(); /* タイトル画面 */ title(); /* ステージセレクト */ stage=0; SELECT: if (4==select()) { sys_wait(7); return 0; } /* スタート */ load(); for (; stage<4; stage++) { initialize( state, gStageData[stage] ); /* ステージ初期化 */ /* メインループ */ while ( true ){ /* まず描画 */ sys_wait(7); draw4x( state, gStageWidth, gStageHeight ); screen_set_char(SCREEN2, 0, 0, 18, 18, screen); /* クリアチェック */ if ( checkClear(state, gStageWidth, gStageHeight ) ){ break; /* クリアチェック */ } k=key_press_check(); switch (k) { case KEY_START: goto SELECT; case KEY_UP1: k = UP;break; case KEY_DOWN1: k = DOWN;break; case KEY_LEFT1: k = LEFT;break; case KEY_RIGHT1: k = RIGHT;break; } update( state, k, gStageWidth, gStageHeight ); } } /* ゲームクリア */ clear(); return 0; }