- 论坛徽章:
- 0
|
原帖由 cylmartin 于 2006-3-9 10:51 发表
学校要我们做一个GUI Hangman(吊死鬼)游戏, 这是一个猜字游戏, 每当你猜对一个字母, 游戏继续让你猜下一个字母直到单词被猜对,表示你赢了. 相反, 假如你连续六次机会(身体分成六不份: 头, 双手, 双脚和中间躯体)都 ...
我觉得其难点不在于语言本身而在于没有养成一个拿程序来思考的习惯,所以无从下手。其实如果有了一门语言的编程经验,即拿程序来解决问题的思想,完成一个问题无论用何种语言,其逻辑都差不多。当然这是经验问题。
你可以先把问题的解决步骤描述出来,然后再考虑如何用程序来实现。比如这个问题,抛开程序,可以分成这么几步解决:
1、设定一个字,这个字就是要猜的字
2、输入字母,(为了便于理解,将其在设定的字的位置记为n,输入第一个字母,n=1,输入第二个字母,n=2)
3、如果这个字母跟刚才设定的字的第n个字母相同,那么跳过下面所有条件,重复步骤2输入n+1位字母,如果所有字母完全相同,跳到步骤5,否则进行下一步。
4、如果这个字母跟刚才设定的字的第n个字母不同,那么错误次数加一,如果错误次数等于6,那么画出一部分身体;如果身体所有部分都画出,那么跳到步骤6,否则跳过下面所有条件,重复步骤2输入第n位字母。
5、显示你赢了
6、显示你输了
想好了步骤,我们来一步一步解决。
第一步,如何保存设定的这个字母?
最简单的办法就是保存在一个变量。
第二步,如何输入字母?通过查找手册我们可以发现最容易的方法就是用 raw_input()。那么现在的程序是
- word = "python"
- w = raw_input()
复制代码
第三步,比较。你可能会想,如何知道当前是第几位字母,如何比较?word = "python",那么假设第一个字母输入"p",第二个字母输入 "y",那么前两个字母就是 "py",只要 word 这个变量值("python")是以"py"开头,那么就代表输入正确。查找字符串方法我们发现有一个 startswith 方法,那么现在的程序就是
- word = "python"
- w = raw_input()
- if word.startswith(w):
复制代码
问题出来了。输入第二个字母"y"的时候,变量w的值成了"y"。我们就要把前面输入的正确的字母保存下来。程序就变成了
- word = "python"
- allw = ''
- w = raw_input()
- allw = allw+w
- if word.startswith(allw):
复制代码
接着看条件。如果相同,就重复步骤2。那么就要用到循环结构。查找语法得知循环的写法之后,程序如下:
- word = "python"
- allw = ''
- while True:
- w = raw_input()
- allw = allw+w
- if word.startswith(allw):
- continue
复制代码
下面的条件是如果完全相同就跳到步骤5。步骤5我们可以用函数完成,那么代码如下:
- word = "python"
- allw = ''
- while True:
- w = raw_input()
- allw = allw+w
- if word.startswith(allw):
- if allw==word:
- step5()
- break
- else:
- continue
- def step5():
- print "You win!, the word is %s" % (word)
复制代码
第四步,如果不同,那么错误次数加一。同样,我们要保存错误次数
- word = "python"
- allw = ''
- errorCount = 0
- while True:
- w = raw_input()
- allw = allw+w
- if word.startswith(allw):
- if allw==word:
- step5()
- break
- else:
- continue
- else:
- errorCount+=1
- if errorCount==6:
- drawBody()
- errorCount = 0 #六次错误之后计数清零
- else:
- continue
- def step5():
- print "You win!, the word is %s" % (word)
复制代码
身体的部分全画出来了,就显示输了,那么我们把这个判断放在画身体里面:
- word = "python"
- allw = ''
- errorCount = 0
- body = 0
- while True:
- w = raw_input()
- allw = allw+w
- if word.startswith(allw):
- if allw==word:
- step5()
- break
- else:
- continue
- else:
- errorCount+=1
- if errorCount==6:
- drawBody()
- errorCount = 0 #六次错误之后计数清零
- else:
- continue
- def step5():
- print "You win!, the word is %s" % (word)
- def drawBody():
- #TODO: 画出身体
- body += 1 #代表画了一次
- if body==6: #假设6次即全部画出
- step6()
- else:
- return
- def step6():
- print "You lost!, the word was %s" % (word)
复制代码
这样一步一步的问题就解决了。下面需要的就是如何画出身体了。
- allw = allw+w
- if word.startswith(allw):
复制代码
应该为
- if word.startswith(all+w):
- allw = allw+w
复制代码
(代码我随手写的,也是刚学python,不知道对不对,仅仅为了说明问题)
[ 本帖最后由 geel 于 2006-3-25 12:33 编辑 ] |
|