(Rock, Paper, Scissors, Lizard and Spock)sheldon谢耳朵独创的剪刀,布,石头,蜥蜴,史波克 用代码实现
2013-10-03 20:50
447 查看
在学linux_C的第8.5节的用代码实现石头、剪刀、布,并且是人机对战时,突然想到蛋疼的sheldon不是独创了Rock, Paper, Scissors, Lizard and Spock了咩,于是开始写代码
欲实现。先说说书上的代码逻辑吧:
0、1、2三个整数分别是剪刀石头布在程序中的内部表示,用户也要求输入0、1或2,然后和计算机随机生成的0、1或2比胜负;书上该节末尾也提出了一个问题:(man - computer + 4) % 3 - 1这个神奇的表达式是如何比较出0、1、2这三个数字在“剪刀石头布”意义上的大小的?
man 和computer的取值只能是0 1 2,那么
man - computer 的结果可以是1,-2 0 -1,2
(man赢的取值是1,-2 平的取值是0,输的取值是-1,2)
加上4之后可以是 5,2(赢) 4(平) 3,6(输)
对3进行取余后只有 2(赢) 1(平) 0(输)
再减1 最后只有 1(赢) 0(平) -1 (输)
其实并不一定非要用这个表达式,只要成功实现这个逻辑即可。
对于Rock, Paper, Scissors, Lizard and Spock的输赢关系是怎样的呢?可以先见链接:http://www.hjenglish.com/new/p114866/
同样,我们用0,1,2,3,4分别来定义Rock, Paper, Scissors, Lizard and Spock,并且用矩阵来分析人机对战的结果:
那么man-computer的值与人的输赢关系如下图:
那么逻辑关系就很明了了:
将man-computer赋值给一个变量d_value意为差值,分为三种情况分别讨论,伪代码如下:
全部代码如下:
欲实现。先说说书上的代码逻辑吧:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { char gesture[3][10]={"scissor","stone","cloth"}; int man,computer,result,ret; srand(time(NULL)); while(1) { computer=rand()%3; printf("\nInuput your gesture (0-scissor 1-stone 2-cloth:\n"); ret =scanf("%d",&man); if(ret!=1||man<0||man>2) { printf("Invalid input! Please input 0,1 or 2.\n"); continue; } printf("Your gesture:%s\tComputer's gesture:%s\n",gesture[man],gesture[computer]); result=(man-computer+4)%3-1; if(result>0) printf("You win!\n"); else if(result==0) printf("Draw!\n"); else printf("You lose!\n"); } return 0; }
0、1、2三个整数分别是剪刀石头布在程序中的内部表示,用户也要求输入0、1或2,然后和计算机随机生成的0、1或2比胜负;书上该节末尾也提出了一个问题:(man - computer + 4) % 3 - 1这个神奇的表达式是如何比较出0、1、2这三个数字在“剪刀石头布”意义上的大小的?
man 和computer的取值只能是0 1 2,那么
man - computer 的结果可以是1,-2 0 -1,2
(man赢的取值是1,-2 平的取值是0,输的取值是-1,2)
加上4之后可以是 5,2(赢) 4(平) 3,6(输)
对3进行取余后只有 2(赢) 1(平) 0(输)
再减1 最后只有 1(赢) 0(平) -1 (输)
其实并不一定非要用这个表达式,只要成功实现这个逻辑即可。
对于Rock, Paper, Scissors, Lizard and Spock的输赢关系是怎样的呢?可以先见链接:http://www.hjenglish.com/new/p114866/
同样,我们用0,1,2,3,4分别来定义Rock, Paper, Scissors, Lizard and Spock,并且用矩阵来分析人机对战的结果:
那么man-computer的值与人的输赢关系如下图:
那么逻辑关系就很明了了:
将man-computer赋值给一个变量d_value意为差值,分为三种情况分别讨论,伪代码如下:
if(d_value==0) 平局 else if (d_value > 0) { if (d_value为奇数) man lose!; else man win; } else { if (d_value为奇数) man win; else man lose; }
全部代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { char gesture[5][10] = { "scissor", "paper", "rock", "lizard", "spock" }; int man, computer, d_value, ret; srand(time(NULL)); while (1) { printf("\*\*\*\*\*\*\*\*\*\*\*\*\*\*\n"); computer = rand() % 5; printf ("\nInuput your gesture (0-scissor 1-paper 2-rock 3-lizard 4-spock:\n"); ret = scanf("%d", &man); printf("ret=%d\n", ret); if (ret != 1 || man < 0 || man > 4) { printf ("Invalid input! Please input 0,1,2,3 or 4.\n"); continue; } printf("Your gesture:%s\tComputer's gesture:%s\n", gesture[man], gesture[computer]); d_value = man - computer; if (d_value == 0) printf("Draw!\n"); else if (d_value > 0) { if (d_value % 2 == 0) printf("You win!\n"); else printf("You lose!\n"); } else { if (d_value % 2 == 0) printf("You lose!\n"); else printf("You win!\n"); } } return 0; }
相关文章推荐
- Coursera-An Introduction to Interactive Programming in Python (Part 1)-Mini-project— Rock-paper-scissors-lizard-Spock
- Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- Interactive Python:Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- Python Mini Project - Rock Paper Scissors Lizard Spock
- Mini-project description 1 - Rock-paper-scissors-lizard-Spock
- Python 8 - Rock-paper-scissors-lizard-spock
- 作业week1 'Rock-paper-scissors-lizard-Spock'
- [Interactive Python] Rock-paper-scissors-lizard-Spock 游戏 Mini-project #1
- Rock-paper-scissors-lizard-Spock
- Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- 1 paper-rock-scissors-lizard-spock
- Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- [ACM_水题] Yet Another Story of Rock-paper-scissors [超水 剪刀石头布]
- Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- 莱斯大学Python课程Mini-project # 1- Rock-paper-scissors-lizard-Spock
- IIPP迷你项目(一)“Rock-paper-scissor-lizard-Spock”
- (scissor , rock , paper) 三星题 剪刀石头布
- [Mini]HTML5-游戏设计-Rock,Paper and Scissors Game
- IIPP迷你项目(一)“Rock-paper-scissor-lizard-Spock”
- Game of Paper, Rock and scissors