game almost working
authorLaurent Mazet <mazet@softndesign.org>
Thu, 19 Dec 2024 22:42:53 +0000 (23:42 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Thu, 19 Dec 2024 22:42:53 +0000 (23:42 +0100)
constant.c
constant.h
script.awk
sokoban.c

index c578bc659e8a344af4b15f81827537d98cea7b91..5addbebef2ab6a6b0f11b2befa2d6b762505f1b1 100644 (file)
@@ -5,7 +5,17 @@
 
 #include "constant.h"
 
-board _level_1 = {
+board_t _level_0 = {
+    7, 5,
+    "#####  "
+    "#@  #  "
+    "# #$###"
+    "# $ ..#"
+    "#######",
+    "Tutorial",
+    0, 0, 0, 0, 0};
+
+board_t _level_1 = {
     19, 11,
     "    #####          "
     "    #   #          "
@@ -21,7 +31,7 @@ board _level_1 = {
     "1",
     0, 0, 0, 0, 0};
 
-board _level_2 = {
+board_t _level_2 = {
     14, 10,
     "############  "
     "#..  #     ###"
@@ -36,7 +46,7 @@ board _level_2 = {
     "2",
     0, 0, 0, 0, 0};
 
-board _level_3 = {
+board_t _level_3 = {
     17, 10,
     "        ######## "
     "        #     @# "
@@ -51,7 +61,7 @@ board _level_3 = {
     "3",
     0, 0, 0, 0, 0};
 
-board _level_4 = {
+board_t _level_4 = {
     19, 14,
     "           ########"
     "           #  ....#"
@@ -70,7 +80,7 @@ board _level_4 = {
     "4",
     0, 0, 0, 0, 0};
 
-board _level_5 = {
+board_t _level_5 = {
     17, 13,
     "        #####    "
     "        #   #####"
@@ -88,7 +98,7 @@ board _level_5 = {
     "5",
     0, 0, 0, 0, 0};
 
-board _level_6 = {
+board_t _level_6 = {
     12, 11,
     "######  ### "
     "#..  # ##@##"
@@ -104,7 +114,7 @@ board _level_6 = {
     "6",
     0, 0, 0, 0, 0};
 
-board _level_7 = {
+board_t _level_7 = {
     13, 12,
     "       ##### "
     " #######   ##"
@@ -121,7 +131,7 @@ board _level_7 = {
     "7",
     0, 0, 0, 0, 0};
 
-board _level_8 = {
+board_t _level_8 = {
     16, 16,
     "  ####          "
     "  #  ###########"
@@ -142,7 +152,7 @@ board _level_8 = {
     "8",
     0, 0, 0, 0, 0};
 
-board _level_9 = {
+board_t _level_9 = {
     17, 14,
     "          #######"
     "          #  ...#"
@@ -161,7 +171,7 @@ board _level_9 = {
     "9",
     0, 0, 0, 0, 0};
 
-board _level_10 = {
+board_t _level_10 = {
     19, 16,
     " ###  #############"
     "##@####       #   #"
@@ -182,7 +192,7 @@ board _level_10 = {
     "10",
     0, 0, 0, 0, 0};
 
-board _level_11 = {
+board_t _level_11 = {
     19, 15,
     "          ####     "
     "     #### #  #     "
@@ -202,7 +212,7 @@ board _level_11 = {
     "11",
     0, 0, 0, 0, 0};
 
-board _level_12 = {
+board_t _level_12 = {
     17, 13,
     "################ "
     "#              # "
@@ -220,7 +230,7 @@ board _level_12 = {
     "12",
     0, 0, 0, 0, 0};
 
-board _level_13 = {
+board_t _level_13 = {
     17, 13,
     "################ "
     "#              # "
@@ -238,7 +248,7 @@ board _level_13 = {
     "12X",
     0, 0, 0, 0, 0};
 
-board _level_14 = {
+board_t _level_14 = {
     19, 13,
     "   #########       "
     "  ##   ##  ######  "
@@ -256,7 +266,7 @@ board _level_14 = {
     "13",
     0, 0, 0, 0, 0};
 
-board _level_15 = {
+board_t _level_15 = {
     18, 16,
     "       #######    "
     " #######     #    "
@@ -277,7 +287,7 @@ board _level_15 = {
     "14",
     0, 0, 0, 0, 0};
 
-board _level_16 = {
+board_t _level_16 = {
     17, 16,
     "   ########      "
     "   #   #  #      "
@@ -298,7 +308,7 @@ board _level_16 = {
     "15",
     0, 0, 0, 0, 0};
 
-board _level_17 = {
+board_t _level_17 = {
     14, 15,
     "#####         "
     "#   ##        "
@@ -318,7 +328,7 @@ board _level_17 = {
     "16",
     0, 0, 0, 0, 0};
 
-board _level_18 = {
+board_t _level_18 = {
     16, 14,
     "   ##########   "
     "   #..  #   #   "
@@ -337,7 +347,7 @@ board _level_18 = {
     "17",
     0, 0, 0, 0, 0};
 
-board _level_19 = {
+board_t _level_19 = {
     19, 13,
     "     ###########   "
     "     #  .  #   #   "
@@ -355,7 +365,7 @@ board _level_19 = {
     "18",
     0, 0, 0, 0, 0};
 
-board _level_20 = {
+board_t _level_20 = {
     19, 16,
     "  ######           "
     "  #   @####        "
@@ -376,7 +386,7 @@ board _level_20 = {
     "19",
     0, 0, 0, 0, 0};
 
-board _level_21 = {
+board_t _level_21 = {
     19, 16,
     "    ##########     "
     "#####        ####  "
@@ -397,7 +407,7 @@ board _level_21 = {
     "20",
     0, 0, 0, 0, 0};
 
-board _level_22 = {
+board_t _level_22 = {
     19, 16,
     "    ##########     "
     "#####        ####  "
@@ -418,7 +428,7 @@ board _level_22 = {
     "20X",
     0, 0, 0, 0, 0};
 
-board _level_23 = {
+board_t _level_23 = {
     15, 15,
     "#########      "
     "#       #      "
@@ -438,7 +448,7 @@ board _level_23 = {
     "21",
     0, 0, 0, 0, 0};
 
-board _level_24 = {
+board_t _level_24 = {
     19, 16,
     "######     ####    "
     "#    #######  #####"
@@ -459,7 +469,7 @@ board _level_24 = {
     "22",
     0, 0, 0, 0, 0};
 
-board _level_25 = {
+board_t _level_25 = {
     19, 14,
     "    #######        "
     "    #  #  ####     "
@@ -478,7 +488,7 @@ board _level_25 = {
     "23",
     0, 0, 0, 0, 0};
 
-board _level_26 = {
+board_t _level_26 = {
     19, 16,
     "###############    "
     "#..........  .#### "
@@ -499,7 +509,7 @@ board _level_26 = {
     "24",
     0, 0, 0, 0, 0};
 
-board _level_27 = {
+board_t _level_27 = {
     19, 16,
     "####               "
     "#  ##############  "
@@ -520,7 +530,7 @@ board _level_27 = {
     "25",
     0, 0, 0, 0, 0};
 
-board _level_28 = {
+board_t _level_28 = {
     19, 16,
     "####               "
     "#  ##############  "
@@ -541,7 +551,7 @@ board _level_28 = {
     "25X",
     0, 0, 0, 0, 0};
 
-board _level_29 = {
+board_t _level_29 = {
     15, 12,
     " #######       "
     " #  #  #####   "
@@ -558,7 +568,7 @@ board _level_29 = {
     "26",
     0, 0, 0, 0, 0};
 
-board _level_30 = {
+board_t _level_30 = {
     19, 13,
     " ################# "
     " #...   #    #   ##"
@@ -576,7 +586,7 @@ board _level_30 = {
     "27",
     0, 0, 0, 0, 0};
 
-board _level_31 = {
+board_t _level_31 = {
     17, 15,
     "         #####   "
     "     #####   #   "
@@ -596,7 +606,7 @@ board _level_31 = {
     "28",
     0, 0, 0, 0, 0};
 
-board _level_32 = {
+board_t _level_32 = {
     19, 13,
     "#####              "
     "#   ##             "
@@ -614,7 +624,7 @@ board _level_32 = {
     "29",
     0, 0, 0, 0, 0};
 
-board _level_33 = {
+board_t _level_33 = {
     19, 14,
     "       ########### "
     "       #   #     # "
@@ -633,7 +643,7 @@ board _level_33 = {
     "30",
     0, 0, 0, 0, 0};
 
-board _level_34 = {
+board_t _level_34 = {
     18, 16,
     "  ####            "
     "  #  #########    "
@@ -654,7 +664,7 @@ board _level_34 = {
     "31",
     0, 0, 0, 0, 0};
 
-board _level_35 = {
+board_t _level_35 = {
     13, 15,
     "      ####   "
     "  #####  #   "
@@ -674,7 +684,7 @@ board _level_35 = {
     "32",
     0, 0, 0, 0, 0};
 
-board _level_36 = {
+board_t _level_36 = {
     12, 15,
     "############"
     "##     ##  #"
@@ -694,7 +704,7 @@ board _level_36 = {
     "33",
     0, 0, 0, 0, 0};
 
-board _level_37 = {
+board_t _level_37 = {
     14, 15,
     " #########    "
     " #....   ##   "
@@ -714,7 +724,7 @@ board _level_37 = {
     "34",
     0, 0, 0, 0, 0};
 
-board _level_38 = {
+board_t _level_38 = {
     19, 16,
     "############ ######"
     "#   #    # ###....#"
@@ -735,7 +745,7 @@ board _level_38 = {
     "35",
     0, 0, 0, 0, 0};
 
-board _level_39 = {
+board_t _level_39 = {
     19, 16,
     "            #####  "
     "#####  ######   #  "
@@ -756,7 +766,7 @@ board _level_39 = {
     "36",
     0, 0, 0, 0, 0};
 
-board _level_40 = {
+board_t _level_40 = {
     19, 15,
     "###########        "
     "#......   #########"
@@ -776,7 +786,7 @@ board _level_40 = {
     "37",
     0, 0, 0, 0, 0};
 
-board _level_41 = {
+board_t _level_41 = {
     19, 15,
     "###########        "
     "#......   #########"
@@ -796,7 +806,7 @@ board _level_41 = {
     "37X",
     0, 0, 0, 0, 0};
 
-board _level_42 = {
+board_t _level_42 = {
     11, 11,
     "      #### "
     "####### @# "
@@ -812,7 +822,7 @@ board _level_42 = {
     "38",
     0, 0, 0, 0, 0};
 
-board _level_43 = {
+board_t _level_43 = {
     19, 16,
     "             ######"
     " #############....#"
@@ -833,7 +843,7 @@ board _level_43 = {
     "39",
     0, 0, 0, 0, 0};
 
-board _level_44 = {
+board_t _level_44 = {
     17, 16,
     "    ############ "
     "    #          ##"
@@ -854,7 +864,7 @@ board _level_44 = {
     "40",
     0, 0, 0, 0, 0};
 
-board _level_45 = {
+board_t _level_45 = {
     19, 15,
     "           #####   "
     "          ##   ##  "
@@ -874,7 +884,7 @@ board _level_45 = {
     "41",
     0, 0, 0, 0, 0};
 
-board _level_46 = {
+board_t _level_46 = {
     18, 13,
     "     ########     "
     "  ####      ######"
@@ -892,7 +902,7 @@ board _level_46 = {
     "42",
     0, 0, 0, 0, 0};
 
-board _level_47 = {
+board_t _level_47 = {
     18, 13,
     "     ########     "
     "  ####      ######"
@@ -910,7 +920,7 @@ board _level_47 = {
     "42X",
     0, 0, 0, 0, 0};
 
-board _level_48 = {
+board_t _level_48 = {
     19, 11,
     "        #######    "
     "    #####  #  #### "
@@ -926,7 +936,7 @@ board _level_48 = {
     "43",
     0, 0, 0, 0, 0};
 
-board _level_49 = {
+board_t _level_49 = {
     19, 15,
     " #####             "
     " #   #             "
@@ -946,7 +956,7 @@ board _level_49 = {
     "44",
     0, 0, 0, 0, 0};
 
-board _level_50 = {
+board_t _level_50 = {
     16, 14,
     "##### ####      "
     "#...# #  ####   "
@@ -965,7 +975,7 @@ board _level_50 = {
     "45",
     0, 0, 0, 0, 0};
 
-board _level_51 = {
+board_t _level_51 = {
     14, 16,
     "##########    "
     "#        #### "
@@ -986,7 +996,7 @@ board _level_51 = {
     "46",
     0, 0, 0, 0, 0};
 
-board _level_52 = {
+board_t _level_52 = {
     18, 11,
     "         ####     "
     " #########  ##    "
@@ -1002,7 +1012,7 @@ board _level_52 = {
     "47",
     0, 0, 0, 0, 0};
 
-board _level_53 = {
+board_t _level_53 = {
     13, 16,
     "  #########  "
     "  #*.*#*.*#  "
@@ -1023,7 +1033,7 @@ board _level_53 = {
     "48",
     0, 0, 0, 0, 0};
 
-board _level_54 = {
+board_t _level_54 = {
     16, 15,
     "       ####     "
     "       #  ##    "
@@ -1043,7 +1053,7 @@ board _level_54 = {
     "49",
     0, 0, 0, 0, 0};
 
-board _level_55 = {
+board_t _level_55 = {
     19, 16,
     "      ############ "
     "     ##..    #   # "
@@ -1064,7 +1074,7 @@ board _level_55 = {
     "50",
     0, 0, 0, 0, 0};
 
-board _level_56 = {
+board_t _level_56 = {
     19, 16,
     "      ############ "
     "     ##..    #   # "
@@ -1085,7 +1095,7 @@ board _level_56 = {
     "50X",
     0, 0, 0, 0, 0};
 
-board _level_57 = {
+board_t _level_57 = {
     14, 12,
     " #########    "
     " #       #    "
@@ -1102,7 +1112,7 @@ board _level_57 = {
     "51X",
     0, 0, 0, 0, 0};
 
-board _level_58 = {
+board_t _level_58 = {
     19, 17,
     "           ########"
     "           #......#"
@@ -1124,7 +1134,7 @@ board _level_58 = {
     "52X",
     0, 0, 0, 0, 0};
 
-board _level_59 = {
+board_t _level_59 = {
     20, 12,
     "####################"
     "#                ###"
@@ -1141,7 +1151,7 @@ board _level_59 = {
     "53X",
     0, 0, 0, 0, 0};
 
-board _level_60 = {
+board_t _level_60 = {
     20, 12,
     "####################"
     "#   #    #   #   #@#"
@@ -1158,7 +1168,7 @@ board _level_60 = {
     "54X",
     0, 0, 0, 0, 0};
 
-board _level_61 = {
+board_t _level_61 = {
     20, 12,
     "####################"
     "#    @##      #   ##"
@@ -1175,7 +1185,7 @@ board _level_61 = {
     "55X",
     0, 0, 0, 0, 0};
 
-board _level_62 = {
+board_t _level_62 = {
     20, 12,
     "####################"
     "#  #  ##    #   @###"
@@ -1192,7 +1202,7 @@ board _level_62 = {
     "56X",
     0, 0, 0, 0, 0};
 
-board _level_63 = {
+board_t _level_63 = {
     20, 12,
     "####################"
     "#@     ###   #  #  #"
@@ -1209,7 +1219,7 @@ board _level_63 = {
     "57X",
     0, 0, 0, 0, 0};
 
-board _level_64 = {
+board_t _level_64 = {
     20, 12,
     "####################"
     "##...   ## #    #  #"
@@ -1226,7 +1236,7 @@ board _level_64 = {
     "58X",
     0, 0, 0, 0, 0};
 
-board _level_65 = {
+board_t _level_65 = {
     20, 12,
     "####################"
     "#   #  #@# ##  #####"
@@ -1243,7 +1253,7 @@ board _level_65 = {
     "59X",
     0, 0, 0, 0, 0};
 
-board _level_66 = {
+board_t _level_66 = {
     20, 12,
     "####################"
     "# #     #          #"
@@ -1260,7 +1270,7 @@ board _level_66 = {
     "60X",
     0, 0, 0, 0, 0};
 
-board _level_67 = {
+board_t _level_67 = {
     20, 12,
     "####################"
     "#     ###..###     #"
@@ -1277,7 +1287,7 @@ board _level_67 = {
     "61X",
     0, 0, 0, 0, 0};
 
-board _level_68 = {
+board_t _level_68 = {
     20, 12,
     "####################"
     "#    #  # #  #  #  #"
@@ -1294,7 +1304,7 @@ board _level_68 = {
     "62X",
     0, 0, 0, 0, 0};
 
-board _level_69 = {
+board_t _level_69 = {
     20, 12,
     "####################"
     "#....#       #  #  #"
@@ -1311,7 +1321,7 @@ board _level_69 = {
     "63X",
     0, 0, 0, 0, 0};
 
-board _level_70 = {
+board_t _level_70 = {
     20, 12,
     "####################"
     "#....###           #"
@@ -1328,7 +1338,7 @@ board _level_70 = {
     "64X",
     0, 0, 0, 0, 0};
 
-board _level_71 = {
+board_t _level_71 = {
     20, 12,
     "####################"
     "#     #     @#...###"
@@ -1345,7 +1355,7 @@ board _level_71 = {
     "65X",
     0, 0, 0, 0, 0};
 
-board _level_72 = {
+board_t _level_72 = {
     20, 12,
     "####################"
     "#     #  #...#@    #"
@@ -1362,7 +1372,7 @@ board _level_72 = {
     "66X",
     0, 0, 0, 0, 0};
 
-board _level_73 = {
+board_t _level_73 = {
     20, 12,
     "####################"
     "#####@###.##...##  #"
@@ -1379,7 +1389,7 @@ board _level_73 = {
     "67X",
     0, 0, 0, 0, 0};
 
-board _level_74 = {
+board_t _level_74 = {
     20, 12,
     "####################"
     "#@     #   #       #"
@@ -1396,7 +1406,7 @@ board _level_74 = {
     "68X",
     0, 0, 0, 0, 0};
 
-board _level_75 = {
+board_t _level_75 = {
     20, 12,
     "####################"
     "#  #      #   #   ##"
@@ -1413,7 +1423,7 @@ board _level_75 = {
     "69X",
     0, 0, 0, 0, 0};
 
-board _level_76 = {
+board_t _level_76 = {
     20, 12,
     "####################"
     "#  #  # #    #  #  #"
@@ -1430,7 +1440,7 @@ board _level_76 = {
     "70X",
     0, 0, 0, 0, 0};
 
-board _level_77 = {
+board_t _level_77 = {
     20, 12,
     "####################"
     "#  #     #  ##    ##"
@@ -1447,7 +1457,7 @@ board _level_77 = {
     "71X",
     0, 0, 0, 0, 0};
 
-board _level_78 = {
+board_t _level_78 = {
     20, 12,
     "####################"
     "#      ....#    ####"
@@ -1464,7 +1474,7 @@ board _level_78 = {
     "72X",
     0, 0, 0, 0, 0};
 
-board _level_79 = {
+board_t _level_79 = {
     20, 12,
     "####################"
     "#        #   #@ #  #"
@@ -1481,7 +1491,7 @@ board _level_79 = {
     "73X",
     0, 0, 0, 0, 0};
 
-board _level_80 = {
+board_t _level_80 = {
     20, 12,
     "####################"
     "#     #   #####    #"
@@ -1498,7 +1508,7 @@ board _level_80 = {
     "74X",
     0, 0, 0, 0, 0};
 
-board _level_81 = {
+board_t _level_81 = {
     20, 12,
     "####################"
     "#   #   #    #   #@#"
@@ -1515,7 +1525,7 @@ board _level_81 = {
     "75X",
     0, 0, 0, 0, 0};
 
-board _level_82 = {
+board_t _level_82 = {
     20, 12,
     "####################"
     "# # # #   #@##   # #"
@@ -1532,7 +1542,7 @@ board _level_82 = {
     "76X",
     0, 0, 0, 0, 0};
 
-board _level_83 = {
+board_t _level_83 = {
     20, 15,
     "####################"
     "#    ##   #    #   #"
@@ -1552,7 +1562,7 @@ board _level_83 = {
     "77X",
     0, 0, 0, 0, 0};
 
-board _level_84 = {
+board_t _level_84 = {
     14, 13,
     "######  ##### "
     "#    #  #   # "
@@ -1570,7 +1580,7 @@ board _level_84 = {
     "77SL",
     0, 0, 0, 0, 0};
 
-board _level_85 = {
+board_t _level_85 = {
     19, 12,
     "       ########### "
     "       #         # "
@@ -1587,7 +1597,7 @@ board _level_85 = {
     "78X",
     0, 0, 0, 0, 0};
 
-board _level_86 = {
+board_t _level_86 = {
     19, 12,
     "#############      "
     "#           #      "
@@ -1604,7 +1614,7 @@ board _level_86 = {
     "79X",
     0, 0, 0, 0, 0};
 
-board _level_87 = {
+board_t _level_87 = {
     19, 13,
     "  #################"
     "###@##         ...#"
@@ -1622,7 +1632,7 @@ board _level_87 = {
     "80X",
     0, 0, 0, 0, 0};
 
-board _level_88 = {
+board_t _level_88 = {
     19, 13,
     "              #####"
     "     ##########   #"
@@ -1640,7 +1650,7 @@ board _level_88 = {
     "81X",
     0, 0, 0, 0, 0};
 
-board _level_89 = {
+board_t _level_89 = {
     17, 13,
     "    ######       "
     " ####    #       "
@@ -1658,7 +1668,7 @@ board _level_89 = {
     "82X",
     0, 0, 0, 0, 0};
 
-board _level_90 = {
+board_t _level_90 = {
     17, 13,
     "####### #########"
     "#     # #   ##  #"
@@ -1676,7 +1686,7 @@ board _level_90 = {
     "83X",
     0, 0, 0, 0, 0};
 
-board _level_91 = {
+board_t _level_91 = {
     16, 12,
     "#######         "
     "#     ##########"
@@ -1693,7 +1703,7 @@ board _level_91 = {
     "84X",
     0, 0, 0, 0, 0};
 
-board _level_92 = {
+board_t _level_92 = {
     20, 16,
     "############        "
     "#      #   ##       "
@@ -1714,7 +1724,7 @@ board _level_92 = {
     "85X",
     0, 0, 0, 0, 0};
 
-board _level_93 = {
+board_t _level_93 = {
     17, 10,
     "################ "
     "#       #@ #   # "
@@ -1729,7 +1739,7 @@ board _level_93 = {
     "86X",
     0, 0, 0, 0, 0};
 
-board _level_94 = {
+board_t _level_94 = {
     16, 14,
     "    #####       "
     " ####   ## #####"
@@ -1748,7 +1758,7 @@ board _level_94 = {
     "87X",
     0, 0, 0, 0, 0};
 
-board _level_95 = {
+board_t _level_95 = {
     17, 16,
     "#############    "
     "#........####    "
@@ -1769,7 +1779,7 @@ board _level_95 = {
     "88X",
     0, 0, 0, 0, 0};
 
-board _level_96 = {
+board_t _level_96 = {
     20, 17,
     " ################## "
     " #   $       ...#.##"
@@ -1791,7 +1801,7 @@ board _level_96 = {
     "89X",
     0, 0, 0, 0, 0};
 
-board _level_97 = {
+board_t _level_97 = {
     20, 16,
     "####################"
     "#..#    #          #"
@@ -1817,10 +1827,13 @@ board_t *getlevel (int id)
     board_t *pt = NULL;
 
     switch (id) {
-    case -1
+    case -1:
         printf ("level: [1..97]\n");
         pt = (board_t *)(-1);
         break;
+    case 0:
+        pt = &_level_0;
+        break;
     case 1:
         pt = &_level_1;
         break;
index 258a35ff3525d545fe7ebf557a23bb2e4440a01e..f97d35d6795d418124e679405e02d04617cbc1a7 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "type.h"
 
-board_t *getboard (char *name);
+board_t *getlevel (int id);
 
 #endif /* __CONSTANT_H__ */
 
index 79ee7d49d0c8ba9316bb620cdbb606409d1a6e8c..e3c0b7d04580c9b492ee9aa71feb0e912adc3dae 100644 (file)
@@ -22,7 +22,7 @@ function format(tab, width, height) {
        sub(/Title: /, "")
        title=$0
        nblevels++
-       printf "board _level_%d = {\n", nblevels
+       printf "board_t _level_%d = {\n", nblevels
        printf "    %d, %d,", nbrows, nblines
        format(tab, nbrows, nblines)
        printf "    \"%s\",\n", title
index 3bf0843ffc6fb31351bf3cab32e9466633386201..3e72f87aaf01f4ec971a808327ed8a38d9637f2f 100644 (file)
--- a/sokoban.c
+++ b/sokoban.c
@@ -1,13 +1,14 @@
 /* depend: */
 /* cflags: */
-/* linker: debug.o display.o function.o -lcurses */
-/* doslnk: debug.o display.o function.o -lpdc~1 */
-/* winlnk: debug.o display.o function.o -lpdcurses */
+/* linker: constant.o debug.o display.o function.o -lcurses */
+/* doslnk: constant.o debug.o display.o function.o -lpdc~1 */
+/* winlnk: constant.o debug.o display.o function.o -lpdcurses */
 
 #include <curses.h>
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "constant.h"
 #include "debug.h"
 #include "display.h"
 #include "function.h"
@@ -17,7 +18,7 @@ char *progname = NULL;
 char *version = "0.1";
 
 char *filename = NULL; /* .sok */
-char *levels = "level.skb";
+int level = 0;
 int savelen = 12;
 int scale = 1;
 int wide = 0;
@@ -31,16 +32,17 @@ char *help =
     "<k> Move down cursor\n"
     "<l> Move right cursor\n"
     "<q> Quit\n"
+    "<r> Restart level\n"
     "<s> Save file\n"
     ;
 
 int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
-    fprintf (fd, "usage: %s [-c] [-f file] [-h] [-l file] [-s int] [-v int] [-w]\n", progname);
+    fprintf (fd, "usage: %s [-c] [-f file] [-h] [-l int] [-s int] [-v int] [-w]\n", progname);
     fprintf (fd, " -f: file name (%s)\n", (filename) ? filename : "none");
     fprintf (fd, " -h: help message\n");
-    fprintf (fd, " -l: level library (%s)\n", levels);
+    fprintf (fd, " -l: level (%d)\n", level);
     fprintf (fd, " -s: scale [0..3] (%d)\n", scale);
     fprintf (fd, " -v: verbose level (%d)\n", verbose);
     fprintf (fd, " -w: wide board (%d)\n", wide);
@@ -82,10 +84,10 @@ int main (int argc, char *argv[])
         case 'l':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (ERROR, fprintf (stderr, "%s: no file specified\n", progname));
+                VERBOSE (ERROR, fprintf (stderr, "%s: no level specified\n", progname));
                 return usage (1);
             }
-            levels = arg;
+            level = atoi (arg);
             break;
         case 's':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
@@ -132,6 +134,14 @@ int main (int argc, char *argv[])
             VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", filename));
             return 1;
         }
+    } else {
+        board_t *temp = getlevel (level);
+        if (temp == (board_t *)(-1)) {
+            return 0;
+        }
+        if (temp) {
+            board = copyboard (temp);
+        }
     }
     if (board == NULL) {
         VERBOSE (ERROR, fprintf (stderr, "no board defined\n"));
@@ -171,15 +181,16 @@ int main (int argc, char *argv[])
     int mode = 0;
     int stop = 0;
     int dir = -1;
+    board_t *current = copyboard (board);
     while (!stop) {
         char *ptr = NULL;
 
         if (dir >= 0) {
-            movesokoban (board, dir);
+            movesokoban (current, dir);
             dir = -1;
         }
-        boardwindow (board);
-        mode = endofgame (board);
+        boardwindow (current);
+        mode = endofgame (current);
 
         int ch = getch ();
         switch (ch) {
@@ -187,8 +198,17 @@ int main (int argc, char *argv[])
         case '\n':
         case '\r':
             if (mode == 1) {
-                // load next level
-                stop = 1;
+                freeboard (current);
+                level++;
+                board_t *temp = getlevel (level);
+                if (temp) {
+                    freeboard (board);
+                    board = copyboard (temp);
+                    setscale (board, scale);
+                    current = copyboard (board);
+                } else {
+                    stop = 1;
+                }
             }
             break;
         case KEY_UP:
@@ -209,8 +229,17 @@ int main (int argc, char *argv[])
             break;
         case KEY_ESC:
         case 'q':
+            freeboard (current);
             stop = 1;
             break;
+        case KEY_BACKSPACE:
+        case KEY_DELETE:
+        case 127:
+        case '\b':
+        case 'r':
+            freeboard (current);
+            current = copyboard (board);
+            break;
         case 's':
             savename = savewindow (savelen, xsave, ysave);
             if (savename != NULL) {
@@ -236,8 +265,7 @@ int main (int argc, char *argv[])
 /* test: sokoban.exe -f nofile.sok 2>&1 | grep "can't read file" */
 /* test: sokoban.exe -f bogus.sok 2>&1 | grep 'incorrect file' */
 /* test: sokoban.exe -h | grep usage */
-/* test_: sokoban.exe -l nofile.skb 2>&1 | grep "can't read library" */
-/* test_: sokoban.exe -l bogus.skb 2>&1 | grep 'incorrect library' */
+/* test: sokoban.exe -l 2>&1 | grep specified */
 /* test: sokoban.exe -s 2>&1 | grep specified */
 /* test: sokoban.exe -v 2>&1 | grep missing */
 /* test: sokoban.exe _ 2>&1 | grep invalid */