フルスクリーンモード

 フルスクリーンモードとウィンドウモードを切り替えられるようにします。

 1.変数の初期設定
 2.指定したモードで画面を出す
 3.メニューを表示する
 4.項目の選択

 フルスクリーンモードとウィンドウモードを切り替えるには、ddscreen命令の第3引数を変えます。0だとフルスクリーンモード、1だとウィンドウモードです。切り替える時には、一旦DirectDrawを終了し、再度初期化(ddinit)を行い、ddscreen命令を実行しなおします。初期化したわけですから、仮想画面に絵を読み込む処理も再度行います。
 DirectDrawを終了する命令はddendです。

 ついでに、タイトル画面にメニューを表示します。今まで"Push Ctrl Key" と書いていたのをやめて、"START"、"SCREEN"、"EXIT"の3つの項目を並べます。"SCREEN"を選んだ時にモードを切り替えます。"START"でゲームがスタートし、"EXIT"でプログラムを終了します。


 1.変数の初期設定

「プログラム起動時の初期設定」に以下の2つを追加します。
    ; スクリーンモード
    scrmode=1 ; 0:フルスクリーン 1:ウィンドウ

    ; タイトル画面で、選択されている項目
    actitem=0
 scrmodeはscreen modeの略です。0ならフルスクリーン、1ならウィンドウモードです。
 actitemはaction itemの略で、今どの項目にカーソルがあるかを表しています。0ならSTART、1ならSCREEN、2ならEXITです。

 2.指定したモードで画面を出す

 画面を作る命令を、scrmodeで指定したモードで出すように修正します。
    *Screen_Init
        ddinit
        ddscreen 640,480,scrmode,2

 3.メニューを表示する

「タイトル表示」処理中の、"Push Ctrl Key" と書く部分を、"START"、"SCREEN"、"EXIT"の3つを縦に並べて表示するように変えます。
 scrmodeが0の時は"SCREEN"の横に"FULL"、1の時は"WINDOW"と書きます。
 actitemが指し示す項目の左横にカーソル(">")を表示します。
    msx=64:msy=328:mescont="S T A R T":gosub *wrtmes
    msx=64:msy=360
    if scrmode=0 {
        mescont="S C R E E N : F U L L"
    }
    else {
        mescont="S C R E E N : W I N D O W"
    }
    gosub *wrtmes
    msx=64:msy=392:mescont="E X I T":gosub *wrtmes
    msx=48:msy=328+(actitem*32):mescont=">":gosub *wrtmes
    ddredraw

 4.項目の選択

 前はタイトルを表示したら、Ctrlキーが押されるのを待つ処理でループしていました。今回は毎回画面を描き直すようにします。そこで、画面を消す命令の前にラベルを追加します。
    *Title_Loop
        await 16
        gosub *Clear_Screen
        gdx=32 :gdy=100
        gdox=0 :gdoy=$40
        gdw=$100 :gdh=$40
        gosub *Graphic_Draw
     ・
     ・
     ・
 なお、"gdx=32 :gdy=100"以降はゲーム名"ABOGADRO"を表示する処理です。

 キー入力の処理は以下のようになります。

        gosub *In_Key
        if (pukey=0)&(ukey=1) {
            actitem=actitem-1
            if actitem=-1 { actitem=2 }
        }
        if (pdkey=0)&(dkey=1) {
            actitem=actitem+1
            if actitem=3 { actitem=0 }
        }
        if (pckey=0)&(ckey=1) {
            if actitem=0 { goto *Init_Param }
            if actitem=1 {
                scrmode=(scrmode+1)\2
                ddend
                goto *Screen_Init
            }
            if actitem=2 { end }
        }
        goto *Title_Loop

    *Init_Param
        ; ゲームスタート時の初期設定
        score=0
        oneup=50000
     ・
     ・
     ・
 なお、ddendはDirectXを終了する命令ではありません。DirectDrawのみ終了します。
 プログラムを終了するには、endだけでOKです。ddendやdiend(DirectInputを終了する)、dsend(DirectSoundを終了する)は必要ありません。プログラムを終わらせる際に、DirectXを終了させるhmmendが自動的に実行されるからです。


 以上をふまえて、フルスクリーンとウィンドウを切り替える処理は以下のようになります。

	; プログラム起動時の初期設定

	; スクリーンモード
	scrmode=1	; 0:フルスクリーン 1:ウィンドウ

	; タイトル画面で、選択されている項目
	actitem=0


*Screen_Init
	ddinit
	ddscreen 640,480,scrmode,2

	; 仮想画面1に絵を読み込む。
	ddgsel 1
	exist "samplecg.bmp"
	if strsize = -1 { end }
	sdim buf, strsize
	bload "samplecg.bmp", buf, strsize
	ddloadmemory buf, 2

*Game_Start
	; タイトル表示
	ddgsel 0
	gosub *In_Key
*Title_Loop
	await 16
	gosub *Clear_Screen
	gdx=32 :gdy=100
	gdox=0 :gdoy=$40
	gdw=$100 :gdh=$40
	gosub *Graphic_Draw
	msx=64:msy=328:mescont="S T A R T":gosub *wrtmes
	msx=64:msy=360
	if scrmode=0 {
		mescont="S C R E E N : F U L L"
	}
	else {
		mescont="S C R E E N : W I N D O W"
	}
	gosub *wrtmes
	msx=64:msy=392:mescont="E X I T":gosub *wrtmes
	msx=48:msy=328+(actitem*32):mescont=">":gosub *wrtmes
	ddredraw
	gosub *In_Key
	if (pukey=0)&(ukey=1) {
		actitem=actitem-1
		if actitem=-1 { actitem=2 }
	}
	if (pdkey=0)&(dkey=1) {
		actitem=actitem+1
		if actitem=3 { actitem=0 }
	}
	if (pckey=0)&(ckey=1) {
		if actitem=0 { goto *Init_Param }
		if actitem=1 {
			scrmode=(scrmode+1)\2
			ddend
			goto *Screen_Init
		}
		if actitem=2 { end }
	}
	goto *Title_Loop

*Init_Param
	; ゲームスタート時の初期設定
	score=0	
	oneup=50000
	 ・
	 ・
	 ・

実行画面
項目


[プログラム全体と絵をダウンロード]


[目次へ][前へ][次へ] inserted by FC2 system