投稿者:たこす
投稿日:2016年12月 8日(木)06時45分41秒
|
|
|
初めまして、たこすと申します。
よろしくお願いします。
最近10進basicを始めまして、ちょっとつまずいてしまった所があります。
図形をキーボードのiキーが押される度に図形を1マスずつ上に動かし、
5マス上に動かしたらそこでループが終了というプログラムを作っています。
iキーが押されたら図形が描画される所までは上手くいったのですが、
ループ文を記述したらiキーを押しても描画されません。
どのように記述すれば上手くいくでしょうか。
ご返答よろしくお願いします。
SET bitmap SIZE 300,300
SET WINDOW -10,10,-10,10
20 CLEAR
DRAW grid
CHARACTER INPUT nowait: a$
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
LET A=0
DO WHILE A<6
IF a$="i" THEN DRAW ao WITH SHIFT(0,A+1)
LOOP
FOR ti=0 TO 5000000
NEXT ti
goto 20
END
|
|
|
投稿者:たろさ
投稿日:2016年12月 8日(木)08時32分29秒
|
|
|
> No.4176[元記事へ]
たこすさんへのお返事です。
> 初めまして、たこすと申します。
> よろしくお願いします。
私、2年生です。思いつくまま凄く適当です。
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
20
CHARACTER INPUT A$
IF A$="i" THEN
CLEAR
DRAW grid
LET A=A+1
DRAW ao WITH SHIFT(0,A)
IF A=5 THEN GOTO 30
GOTO 20
END IF
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
30
END
-----------------------------
上から下へ
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=5
DO
CHARACTER INPUT A$
IF A$="i" THEN
CLEAR
DRAW grid0
LET A=A-1
DRAW ao WITH SHIFT(0,A)
END IF
LOOP UNTIL A=0
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
-----------------------------------------
応用して円板も入れた。
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=5
LET B=-5
DO
CHARACTER INPUT A$
IF A$="i" THEN
CLEAR
DRAW grid0
LET A=A-1
LET B=B+1
SET COLOR 3
DRAW disk WITH SCALE(1)*SHIFT(-2,B)
SET COLOR 4
DRAW disk WITH SCALE(1)*SHIFT(2,B)
DRAW ao WITH SHIFT(0,A)
END IF
LOOP UNTIL A=0
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
--------------------------------------
タイマーに連動させました。iの入力はできませんが
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=7
LET B=-8.35
10
DO
LET t1=TIME
IF MOD(IP(t1/10+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid0
LET A=A-1
LET B=B+1
SET COLOR 3
DRAW disk WITH SCALE(1)*SHIFT(SIN(b)*2,COS(b)*2)
SET COLOR 4
DRAW disk WITH SCALE(1)*SHIFT(COS(a)*2,SIN(a)*2)
DRAW ao WITH SHIFT(0,A)
GOTO 10
END IF
LOOP UNTIL A=0
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
http://blogs.yahoo.co.jp/donald_stinger
|
|
|
投稿者:nagram
投稿日:2016年12月 8日(木)11時23分1秒
|
|
|
たこすさんへのお返事です。
こんなのはどうでしょうか。
SET ECHO "OFF" ! 出力ウインドウに"i"を表示させない
SET bitmap SIZE 300,300
SET WINDOW -10,10,-10,10
DRAW grid
DRAW ao ! 初期画面に四角が不要なら削除
FOR A=1 TO 5
DO
CHARACTER INPUT a$
LOOP UNTIL a$="i"
CLEAR
DRAW grid
DRAW ao WITH SHIFT(0,A)
WAIT DELAY 1 ! 1秒待機
NEXT A
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
|
|
|
投稿者:たこす
投稿日:2016年12月 8日(木)14時30分8秒
|
|
|
> No.4177[元記事へ]
たろささんありがとうございます。
どのプログラムも大変勉強になりました。
タイマー機能を最終的に実装したいなと思っていた所でしたので、
このプログラムはドンピシャでした。
もう一つ質問があるのですが、青色の図形を変数が0になるまで移動したら、今度は赤色の図形を変数が1になるまで移動させようと思っています。この時に赤色の図形の移動にうつる時に、青色の図形が消えてしまいます。
最終的に移動した青色の図形を残しつつ、赤色の図形を移動させるにはどのように記述すれば良いでしょうか。
よろしくお願い致します。
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
LET B=10
10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
DRAW ao WITH SHIFT(0,A)
GOTO 10
END IF
LOOP UNTIL A=0
20
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET B=B-1
DRAW aka WITH SHIFT(0,B)
GOTO 20
END IF
LOOP UNTIL B=1
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
PICTURE aka
SET COLOR 4
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
|
|
|
投稿者:たこす
投稿日:2016年12月 8日(木)14時43分17秒
|
|
|
> No.4178[元記事へ]
nagramさんありがとうございます。
大変勉強になり、当初に望んでいた通りの表現ができました。
本当にありがとうございます。
今たろささんがタイマー機能を活用して、ループ文を考えています。
最初のループ文が終わった直後にDRAW aoを指定しても消えてしまうのは、
次のループ文が始まり、自動的にDRAW aoが消されてしまうからなのでしょうか。
当初の質問内容と少しずれでしまいましたが、お時間があるときで大丈夫ですので、
ご返答頂けると幸いです。よろしくお願い致します。
|
|
|
投稿者:たろさ
投稿日:2016年12月 8日(木)17時41分28秒
|
|
|
> No.4179[元記事へ]
たこすさんへのお返事です。
> このプログラムはドンピシャでした。
私、超能力ある?
私、日本語苦手なので、説明も下手です。段階を追って、3つ書きました。
--------------------------------------
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
SET COLOR 2
DRAW ao WITH SHIFT(0,A)
SET COLOR 4
DRAW ao WITH SHIFT(0,A+1)
GOTO 10
END IF
LOOP UNTIL A=0
PICTURE ao
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
----------------------------------------
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
IF MOD(A,2)=0 THEN
SET COLOR 2
DRAW ao WITH SHIFT(0,A)
ELSE
SET COLOR 4
DRAW ao WITH SHIFT(0,A+1)
END IF
GOTO 10
END IF
LOOP UNTIL A=0
PICTURE ao
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
------------------------------------
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
LET B=10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
IF A<0 THEN
LET B=B-1
SET COLOR 2
DRAW ao WITH SHIFT(0,0)
SET COLOR 4
DRAW ao WITH SHIFT(0,B)
ELSE
SET COLOR 2
DRAW ao WITH SHIFT(0,A)
END IF
END IF
LOOP UNTIL B<2
PICTURE ao
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
--------------------------
ご依頼のタイプは3番目のプログラムだと思われます。
少し遊んで見ました。
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
LET B=10
LET C=10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
IF A<0 THEN
LET B=B-1
SET COLOR 2
DRAW ao WITH SHIFT(0,0)
SET COLOR 4
DRAW ao WITH SHIFT(0,B)
END IF
IF B<0 THEN
LET C=C-1
SET COLOR 2
DRAW ao WITH SHIFT(0,0)
SET COLOR 4
DRAW ao WITH SHIFT(0,1)
SET COLOR 3
DRAW ao WITH SHIFT(0,C)
ELSE
SET COLOR 2
DRAW ao WITH SHIFT(0,A)
END IF
END IF
LOOP UNTIL C=2
PICTURE ao
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
http://blogs.yahoo.co.jp/donald_stinger
|
|
|
投稿者:nagram
投稿日:2016年12月 8日(木)19時30分32秒
|
|
|
> No.4180[元記事へ]
たこすさんへのお返事です。
> 最初のループ文が終わった直後にDRAW aoを指定しても消えてしまうのは、
> 次のループ文が始まり、自動的にDRAW aoが消されてしまうからなのでしょうか。
最初のループ文が終わった直後にDRAW aoを実行しても、すぐ次のループが実行されCLEAR文で画面がすべて消去されてしまうからです。
PICTURE aoを再描画する必要があります。
SET bitmap SIZE 600,600
SET WINDOW -10,10,-10,10
LET A=10
LET B=10
10
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
SET DRAW MODE HIDDEN ! チラつき防止
LET ta=ta+1
CLEAR
DRAW grid
LET A=A-1
DRAW ao WITH SHIFT(0,A)
SET DRAW MODE EXPLICIT ! チラつき防止
! GOTO 10 この行は不要です
END IF
LOOP UNTIL A=0
20
DO
LET t1=TIME
IF MOD(IP(t1/ 0.5+ta),2)=0 THEN
SET DRAW MODE HIDDEN ! チラつき防止
LET ta=ta+1
CLEAR ! 画面消去
DRAW grid
DRAW ao WITH SHIFT(0,A) ! aoの再描画
LET B=B-1
DRAW aka WITH SHIFT(0,B)
SET DRAW MODE EXPLICIT ! チラつき防止
! GOTO 20 この行は不要です
END IF
LOOP UNTIL B=1
PICTURE ao
SET COLOR 2
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
PICTURE aka
SET COLOR 4
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
END
aoとakaで重複している部分も多いので、それをまとめると、たろささんの3番目のプログラムになります。
|
|
|
投稿者:たろさ
投稿日:2016年12月 8日(木)22時31分30秒
|
|
|
> No.4182[元記事へ]
nagramさんへのお返事です。
何時もお世話になります。皆様に教えて頂いた内容をまとめて、1分間のタイマーに仕立てました。
LET t0=TIME
SET bitmap SIZE 600,600
LET W=11
SET WINDOW -w,w,-w,w
SET TEXT FONT "MS ゴシック",20
LET A=11
DO
WAIT DELAY .5
LET t2=t2+1
LET A=A-1
SET AREA COLOR 1
PLOT AREA:-W,-W;-W,W;W,W;W,-W
IF MOD(A,2)=0 THEN
LET t1=t1+1
SET COLOR 6
DRAW ao WITH SHIFT(0,A)
SET TEXT COLOR 5
PLOT TEXT ,AT -.2, A: STR$(ABS(A))
PLOT TEXT ,AT -7, -7: STR$(t1-1)
ELSE
SET COLOR 5
DRAW ao WITH SHIFT(0,A)
SET TEXT COLOR 6
PLOT TEXT ,AT -.2, A: STR$(ABS(A))
PLOT TEXT ,AT -7, -7: STR$(t1-1)
END IF
IF A<-9 THEN
LET A=11
LET B=B+1
END IF
LOOP UNTIL t2=>120-4
PICTURE ao
PLOT AREA:3,0;3,1;1,1;1,0
PLOT AREA:-1,0;-1,1;-3,1;-3,0
END PICTURE
LET TM=TIME-t0
PRINT USING"####." & REPEAT$("#",2):TM;
PRINT "秒"
END
本当はアナログ時計にしたかったのですが、私の力不足です。
後で気になって、
DECLARE EXTERNAL SUB Analog
OPTION ANGLE DEGREES
LET t0=TIME
CALL Analog(360)
LET TM=TIME-t0
PRINT USING"####." & REPEAT$("#",2):TM;
PRINT "秒"
END
EXTERNAL SUB Analog (t3)
OPTION ANGLE DEGREES
SET bitmap SIZE 600,600
LET W=15
SET WINDOW -w,w,-w,w
SET TEXT FONT "MS ゴシック",40
LET B=0
DO
SET DRAW MODE HIDDEN
WAIT DELAY .98
SET COLOR 2
DRAW disk WITH SCALE(12)*SHIFT(0,0)
SET COLOR 0
DRAW disk WITH SCALE(11)*SHIFT(0,0)
! DRAW GRID0
SET COLOR 2
PLOT TEXT ,AT -1.4,8: STR$(12)
PLOT TEXT ,AT 8.5,-1.5: STR$(3)
PLOT TEXT ,AT -.85,-11: STR$(6)
PLOT TEXT ,AT -10.5,-1.5: STR$(9)
! PLOT TEXT ,AT -1.3,-1.5: STR$(b/6+1)
LET B=B+6
SET COLOR 3
DRAW disk WITH SCALE(.5)*SHIFT(SIN(b)*7,COS(b)*7)
SET DRAW MODE EXPLICIT
LOOP UNTIL B=>t3
END SUB
BASIC Acc で動作してます。
http://blogs.yahoo.co.jp/donald_stinger
|
|
|
戻る