忍者ブログ

GAM-22のメモ

[HSP3メモ]サンプル

2024.11 ← 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 →

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

巡回乱数

巡回乱数とは、kz3さんが命名した、俗にいう「重複のない乱数」です。

昔それをやろうと思い、重複したらまた乱数発生みたいなことをやっていました。
まあ、問題ないですが、大きな数になると時間が掛かって、無駄で効率悪いので気分良くありません。
そこで、誰が考えたか知りませんが、かなりいい方法があります。
randomize 

max=5;問題数
repeat max 
b=rnd(cnt+1) 
a(cnt)=a(b) 
a(b)=cnt 
loop

foreach a
mes a(cnt)
loop
PR

getkeyを利用した入力ボックス

正統派というか、面倒な方法です。
A~Z, BS, SPが入力できます。
工夫すれば、改良できると思います。
;===========================================================
;	getkeyを利用した入力ボックス
;===========================================================

	sdim inp,200
	font "Impact",40

*main
	;A~Z, BS, SP
	repeat 45
		rcnt=cnt+48
		if cnt=43:rcnt=8
		if cnt=44:rcnt=32
		getkey key2,rcnt
		if (key2=1){
			if (v1!rcnt)|(v2>10){
				if rcnt=8 : inp=strmid(inp,0,strlen(inp)-1)
				if rcnt!8 & strlen(inp)<16 : poke inp,strlen(inp),rcnt
				if v1!rcnt:v2=0
				v1=rcnt
			}
			v2++
		}
		if (key2=0)&(v1=rcnt) : v1=0
		loop

	redraw 0
	color 255,255,255 : boxf
	color 0,0,0 : pos 0,0

	mes "ENTER YOUR NAME\n"+inp
	if mcnt\40/20=0 : boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5
	redraw 1

	await 30
	mcnt++
	goto*main

inputを利用した入力ボックス

入力途中が微妙なので、onkeyとかの方が良いかも。
;===========================================================
;	inputを利用した入力ボックス
;===========================================================

	sdim inp,200
	input inp,0,0,15
	font "",40

*main
	redraw 0
	color 255,255,255 : boxf
	color 0,0,0 : pos 0,0
		
	mes "ENTER YOUR NAME\n"+inp
	if mcnt\40/20=0 :  boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5
	redraw 1

	await 30
	mcnt++
	goto*main

onkeyを利用した入力ボックス

自力で入力ボックスを作るとなるとgetkeyでも可能ですが、大変です。そこで、onkeyのwparam値にキーコードが代入されるのを利用します。

全角だと拾えないのと、割り込みをしてるのでゲームなどの処理でウェイトが崩壊します。後者のほうは問題ですかね。ASTEROIDはこの方法なんですが、名前を打つとき、ゲームのスピードが狂います。まあ比較的、お勧めな方法です(ショートなら特に)。

;===========================================================
;	onkeyを利用した入力ボックス
;===========================================================

	onkey gosub*push_key
	sdim inp
	font "Impact",40

*main
	redraw 0
	color 255,255,255 : boxf
	color 0,0,0 : pos 0,0
	
	mes "ENTER YOUR NAME\n"+inp
	if mcnt\40/20=0 : boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5
	redraw 1

	await 30
	mcnt++
	goto*main
	
*push_key
	if wparam!8{
		if strlen(inp)<16 & wparam!13 : sdim v1:poke v1,0,iparam:inp += v1
	}else{
		inp = strmid(inp,0,strlen(inp)-1)
	}
	return
カテゴリー
カウンター
最新記事
最新コメント
Twitter
人気記事
Amazon お買い得情報
Amazon お買い得情報
プロフィール
自画像
HN :
GAM-22
性別:
男性
職業:
大学1年生
HSP暦:
6年
好きなもの :
ゲーム, アニメ, マヨネーズ
嫌いなもの :
運動, 注射, ホラー映画, 英語
好きなバンド :
Muse, Radiohead
その他 :
文章能力が欠如している
バナー
Copyright © GAM-22のメモ All Rights Reserved
Powered by ニンジャブログ Designed by ピンキー・ローン・ピッグ 忍者ブログ / [PR]