⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qb

📁 rpg游戏源码
💻
📖 第 1 页 / 共 2 页
字号:
        CASE IS = "w"                                                            
         IF column = 1 THEN                                                      
          LOCATE 10, 1                                                           
          PRINT moveErr$                                                         
         ELSE                                                                    
          column = column - 1                                                    
          LOCATE 10, 1                                                           
          PRINT "You go west."                                                   
         IF monsterType = 0 THEN                                                 
          LOCATE 10, 1                                                           
          PRINT "There's nothing to attack!"                                     
         ELSE                                                                    
          DO WHILE ((MonsterHealth > 0) AND (health > 0))                        
           LOCATE 10, 1                                                          
           PRINT SPACE$(79)                                                      
           PRINT SPACE$(79)                                                      
           PRINT SPACE$(79)                                                      
           LOCATE 10, 1                                                          
           attack = weapon + INT(RND * 9)                                        
           SELECT CASE attack                                                    
                  CASE IS = monsterAttack                                        
                   PRINT "No one wins this round."                               
                  CASE IS > monsterAttack                                        
                                                              :REM  <-- changed  
                   PRINT "You deal the "; RTRIM$(monsterName$); " a blow!"       
                                                              :REM   _____|      
                   MonsterHealth = MonsterHealth - 1                             
                  CASE IS < monsterAttack                                        
                   PRINT "You have been wounded!"                                
                   health = health - 1                                           
           END SELECT                                                            
           PRINT pressKey$                                                       
           SLEEP                                                                 
          LOOP                                                                   
          LOCATE 10, 1                                                           
          IF health > 0 THEN                                                     
           PRINT "You won the fight!"; SPACE$(20)                                
           PRINT "You found "; MonsterGold; " pieces of gold!"                   
           gold = gold + MonsterGold                                             
           monsterType = 0                                                       
           monster(row, column) = 0                                              
           PRINT pressKey$                                                       
           SLEEP                                                                 
          ELSE                                                                   
                                                              :REM  <-- changed  
           PRINT "The "; RTRIM$(monsterName$); " killed you!"; SPACE$(20)        
                                                              :REM   _____|      
           PRINT "Game over!"; SPACE$(20)                                        
           END                                                                   
          END IF                                                                 
         END IF                                                                  
        CASE IS = "t"                                               :REM <--new  
         IF itemType (or edit) = 0 THEN                             :REM   |     
          LOCATE 10, 1                                              :REM   |     
          PRINT "Nothing to take!"                                  :REM   |     
          PRINT pressKey$                                           :REM   |     
          SLEEP                                                     :REM   |     
         ELSE                                                       :REM   |     
          SELECT CASE itemClass$                                    :REM   |     
                CASE IS = "F"                                       :REM   |     
                 LOCATE 10, 1                                       :REM   |     
                 PRINT "You eat the "; RTRIM$(itemName$); "."       :REM   |     
                 IF health = 20 THEN                                :REM   |     
                  PRINT "You had no wounds, so the food is wasted." :REM   |     
                 ELSE                                               :REM   |     
                  health = health + itemValue                       :REM   |     
                  PRINT "You gain "; itemValue; " health points."   :REM   |     
                 END IF                                             :REM   |     
                CASE IS = "W"                                       :REM   |     
                 LOCATE 10, 1                                       :REM   |     
                 IF weapon >= itemValue THEN                        :REM   |     
                  PRINT "You have a similar or better weapon."      :REM   |     
                 ELSE                                               :REM   |     
                  PRINT "You pick up a "; RTRIM$(itemName$); " !"   :REM   |     
                  weapon = itemValue                                :REM   |     
                  PRINT "Your weapon rating is now "; weapon; "."   :REM   |     
                 END IF                                             :REM   |     
          END SELECT                                                :REM   |     
          PRINT pressKey$                                           :REM   |     
          SLEEP                                                     :REM   |     
          item(row, column) = 0                                     :REM   |     
          itemType (or edit) = 0                                    :REM   |     
         END IF                                                     :REM  _|     
        CASE IS = "q"                                                            
         LOCATE 10, 1                                                            
         PRINT "Bye!"                                                            
         END                                                                     
 END SELECT                                                                      
                                                                                 
LOOP                                                                             
                                                                                 
monsterData:                                                                     
DATA "blind bat 21"                                                              
DATA "rat       11"                                                              
DATA "snake     31"                                                              
DATA "goblin    23"                                                              
产生乱数的依据。由於我们在程式过程未设定该基底值,才会有每次乱数序皆相同的       
现象。 RANDOMIZE 正是用来重新设定该数值的命令,而 TIMER 则代表著从子夜起到       
目前所经过的秒数。 所以我们只要巧妙的利用 RANDOMIZE TIMER 这道命令,就可以       
在每次执行时,产生不同的乱数。                                                   
                                                                                 
物品的设置与邪恶怪物的安排相同, 我们是以 item(10,10) 的阵列来储存,如此可       
让每个房间都能存有一件物品。我们设定房间内出现物品的机率为百分之二十( RND       
< 0.2 ),而物品的编号则从 1 到 9。物品名称则存放在 item$ 阵列之中。             
                                                                                 
CHR$ 是将数值转换成对应的 ASCII 字元。 举例来说,我们可以用 PRINT CHR$(65)       
来替代 PRINT "A"。65 则是 "A" 字元在 ASCII 字元表中的序码。                      
                                                                                 
透过 CHR$ 我们可以使用一些有趣的字元,这可以使画面显得更丰富。在 QBasic 中       
, 只要按下 SHIFT-F1,选择 "Contents" 与 "ASCII charater codes" 後就可以浏       
览 ASCII 字元集。 瞧瞧 ASCII 数值为 2 所对应的字元,是不是有点像 PACMAN 呢       
                                                                                 
每个物品都有自己的名称、类别与数值。 类别用以区分它究竟属於食物( "F" )、       
武器( "W" )还是陷阱( "T" )。而数值的定义则依类别的不同而有所差别。以下       
是不同类别,其数值所代表的意义:                                                 
                                                                                 
类别: 食物             数值: 主角可获得的生命点数                                
      武器                   主角可获得的 " 武器 " 属性                          
      陷阱                   主角触及时,将损失的生命点数                        
                                                                                 
LEFT$(a$, 10) 与 MID$(a$,1,10) 的执行结果完全相同。换句话说,前者只是固定        
从字串开头作为启始位置。 而 RIGHT$("ABCDE", 3) 将会传回 "CDE",也就是自整        
个字串右边第三个字元开始算起复制字串。                                           
                                                                                 
其实 MID$ 可以完全取代 LEFT$ 与 RIGHT$, 不过使用後两者应该可以节省一点时        
间。                                                                             
                                                                                 
当主角走进一间有陷阱的房间内,会立即减损一部份的生命力。 陷阱一旦被触发就        
失去效用,     换句话说,     它只会造成一次伤害。     (解除方式为将阵列        
item(row,column) 的值设定为 0 )                                                 
                                                                                 
RTRIM$("ABC ") 会传回 "ABC"。 换句话说,RTRIM$ 会消除右边的所有空白字原部        
份。LTRIM$ 用法类似,只不过它是从字串左方开始消除空白字元。                      
                                                                                 
在取得物品方面,我们另外加入了一些有趣的检查。 假如主角在拾获一份食物时毫        
发无伤( health=20 ),那麽取得这份食物无疑是一种浪费。另外假使主角试著舍        
取一把不比目前手中为佳的武器时,程式也会于以制止。                               
                                                                                 
OK,我们的 RPG 计画至今已终於完工了。                                            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -