数あて

 投稿者:しばっち  投稿日:2009年 5月10日(日)15時39分39秒
  数あてゲーム

桁数(N)を決める
N桁の数字を入れていく
各桁は全て異なる数字
ヒット・・・数字と位(数字の位置)が一致している数
チップ・・・数字は合っているが位(数字の位置)が違っている数

RANDOMIZE
LET NUM$="0123456789"
!' LET NUM$="0123456789abcdef"
DO
   INPUT PROMPT  "桁数=": N !' 4~5桁程度
LOOP UNTIL LEN(NUM$) >= N
LET T$=NUM$
FOR I = 1 TO N
   LET  R = INT(RND * LEN(T$))+1 !'乱数で1文字ずつ決める
   LET ANS$=ANS$ & MID$(T$,R,1)
   LET T$=LEFT$(T$,R-1) & RIGHT$(T$,LEN(T$)-R) !'選ばれた数字は候補から消す
NEXT I
PRINT N;"桁の数字を入力して下さい。 "
PRINT "GIVE UP は '*' です。"
LET COUNT=1
DO
   DO
      LET FL=0
      PRINT COUNT; "回目 ";
      INPUT PROMPT  "NUMBER = ": S$
      !' LET S$=LCASE$(S$)
      IF ANS$ = S$ THEN
         PRINT "大当たり !!"
         STOP
      ELSEIF S$ = "*" THEN
         PRINT "正解は"; ANS$; "でした。"
         STOP
      ELSEIF S$ = "/" THEN
         IF LEN(SS$)=N AND H > 0 THEN
            PRINT "ヒント  ";
            FOR I=1 TO N
               IF MID$(SS$,I,1)=MID$(ANS$,I,1) THEN PRINT MID$(ANS$,I,1); ELSE PRINT "?";
            NEXT I
            PRINT
            LET SS$=""
            LET COUNT = COUNT + 1
         END IF
         LET FL=1
      ELSEIF LEN(S$)<>N THEN
         PRINT N;"桁の数字ではありません"
         LET FL=1
      ELSE
         FOR I=1 TO N
            IF POS(NUM$,MID$(S$,I,1))=0 THEN
               PRINT "無効な文字があります"
               LET FL=1
               EXIT FOR
            END IF
         NEXT I
      END IF
   LOOP UNTIL FL=0
   LET  H = 0
   LET  C = 0
   FOR I = 1 TO N
         IF MID$(S$,I,1) = MID$(ANS$,I,1) THEN LET  H = H + 1 !'数字と位(位置)が一致
      FOR J = 1 TO N
         IF I <> J AND MID$(S$,I,1) = MID$(ANS$,J,1) THEN LET  C = C + 1 !'数字は一致するが位(位置)が違う
      NEXT J
   NEXT I
   PRINT "ヒット";H; " チップ"; C
   LET  COUNT = COUNT + 1
   LET SS$=S$
LOOP
END
 

戻る