COBOL でゲームプログラミングとか。


出向先で OpenCOBOL 入れてくれって頼まれついでに簡単なプログラム書いてみた。


変数の考え方にクセがあるとか1つの処理に機能盛り過ぎとか、
エクセルIF関数の如く入れ子しないと else if 相当のことが出来ないとか。
色々言いたいところもあるけれど、割と嫌いじゃない言語です。


KAZUATE.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. KAZUATE-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.07.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ANS PIC 99 VALUE ZEROS.
       01 USR PIC 99 VALUE ZEROS.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           ACCEPT ANS FROM TIME.
           DISPLAY "KAZUATE GAME" UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "GUESS(0-99)?" UPON CONSOLE
             ACCEPT USR FROM CONSOLE
             IF USR = ANS
               THEN
                 DISPLAY "IT'S CORRECT!!" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 IF USR = ANS - 1 OR USR = ANS + 1
                   THEN
                     DISPLAY "IT'S NEAR!" UPON CONSOLE
                   ELSE
                     IF USR > ANS
                       THEN
                         DISPLAY "IT'S SMALLER." UPON CONSOLE
                       ELSE
                         IF USR < ANS
                           THEN
                             DISPLAY "IT'S LARGER." UPON CONSOLE
                         END-IF
                     END-IF
                 END-IF
             END-IF
           END-PERFORM.
           STOP RUN.


JANKEN.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. JANKEN-VER100.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.07.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 DSP.
           03 HND PIC N(3) OCCURS 3.
       01 USR PIC 99 VALUE ZEROS.
       01 USR2 PIC 99 VALUE ZEROS.
       01 COM PIC 99 VALUE ZEROS.
       01 TMP PIC 99 VALUE ZEROS.
      *ユーザーの勝ち数をカウントする変数を初期化する。
       01 WIN PIC 9 VALUE ZERO.
      *
       PROCEDURE DIVISION.
       MAIN.
      *手を表す変数を初期化する。
           MOVE "グー " TO HND(1)
           MOVE "チョキ" TO HND(2)
           MOVE "パー " TO HND(3)
      *起動メッセージを表示する。
           DISPLAY "じゃんけんゲーム Ver.1.00 by DumBo" UPON CONSOLE.
      *5回勝負する。
           PERFORM 5 TIMES
      *ユーザーの手を入力する。
             DISPLAY "0:グー、1:チョキ、2:パー" UPON CONSOLE
             ACCEPT USR FROM CONSOLE
      *コンピュータの手を現在時間うち1/10秒2桁を種として決める。
             ACCEPT COM FROM TIME
             DIVIDE 3 INTO COM GIVING TMP REMAINDER COM
      *出した手を表す文字列を作成する。
             DISPLAY "ユーザー:" HND(USR + 1)
               "、コンピュータ:" HND(COM + 1)
      *勝敗を判定し、結果を表示する。
             IF USR = COM
               THEN
                 DISPLAY "・・・あいこです!"
               ELSE
                 COMPUTE USR2 = USR + 1
                 DIVIDE 3 INTO USR2 GIVING TMP REMAINDER USR2
                 IF COM = USR2
                   THEN
                     DISPLAY "・・・ユーザーの勝ちです!"
                       UPON CONSOLE
                     ADD 1 TO WIN
                   ELSE
                     DISPLAY "・・・コンピュータの勝ちです!"
                       UPON CONSOLE
                 END-IF
             END-IF
           END-PERFORM.
      *ユーザーの勝ち数を表示する。
           DISPLAY "ユーザーの勝ち数:" WIN UPON CONSOLE.
           STOP RUN.