Nice TWiki > Doc > ScissorsPaperRockNoviceExample (r1.1 vs. r1.6) TWiki webs:
Dev | Doc | Main | TWiki | Sandbox
Doc . { Changes | Index | Search | Go }
 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.6 - 28 Apr 2005 - TWikiGuest)
Deleted:
<
<

装潢 成人高考 高考 法律 个人简历 求职 小游戏 英语 在线游戏 自学考试 房产 花卉 环保 黄山 减肥 建筑 健康 外汇 学校 医疗器械 医院 在线翻译 招生 专利 太阳能 摄影 牛皮癣 旅游线路 大屏幕 留学 小说 房地产 美女写真 彩票 漫画 考研 免费软件 人体 驾校 美容 喷泉 货架 网站建设 域名 动漫 装修 癌症 集团电话 装饰 视频会议 投影机 地图 许晴 论文 论坛 国庆节 联众 教育 非典 保险 个人域名 培训 咨询 软件 非典型肺炎 英国留学 肝病 写字楼 足球 建材 注册公司 火车时刻表 五笔 外挂999 奇迹外挂 文学 传奇外挂 歌曲 江苏教育 军事 列车时刻表 美体 在线购物 上海热线 笑话 明星写真 汤加丽 人体艺术 浩方 音乐红茶馆 便宜外挂 言情小说 火车票 中国游 墙纸 武侠小说 传奇 传奇世界 玉观音 向导 传奇私服 联众世界 诗歌 究成 边锋 天气 视讯会议 钻石 营养 足彩 空运 硬件 联盟 光端机 电动阀 杀毒 回流焊 帕萨特 吸塑 病毒 掌上电脑 课程 订酒店 移动硬盘 皇历 占卜 净化 测距仪 传媒 传奇3 免费 节能节电 国际机票 红斑狼疮 屏保 同盟 卷板机 财经 高考试题 乳腺病 短信联盟 办公设备 书库 切换器 剪报 招商 电子元器件 耐克 终端 短信同盟 运输 测量机 平衡机 数码冲印 上海大众 校校通 阀门 电脑硬件 美食 贷款 黑客帝国2 企业 晶闸管 足球鞋 网上聊天 网上冲印 二手市场 硬盘录像 市场调查 免费网站 电子书 中级会计师 钎焊 菜谱 台式机 鲜花速递 电视墙 深圳生活 blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog


 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.5 - 26 Jan 2005 - LiYan)
Added:
>
>

装潢 成人高考 高考 法律 个人简历 求职 小游戏 英语 在线游戏 自学考试 房产 花卉 环保 黄山 减肥 建筑 健康 外汇 学校 医疗器械 医院 在线翻译 招生 专利 太阳能 摄影 牛皮癣 旅游线路 大屏幕 留学 小说 房地产 美女写真 彩票 漫画 考研 免费软件 人体 驾校 美容 喷泉 货架 网站建设 域名 动漫 装修 癌症 集团电话 装饰 视频会议 投影机 地图 许晴 论文 论坛 国庆节 联众 教育 非典 保险 个人域名 培训 咨询 软件 非典型肺炎 英国留学 肝病 写字楼 足球 建材 注册公司 火车时刻表 五笔 外挂999 奇迹外挂 文学 传奇外挂 歌曲 江苏教育 军事 列车时刻表 美体 在线购物 上海热线 笑话 明星写真 汤加丽 人体艺术 浩方 音乐红茶馆 便宜外挂 言情小说 火车票 中国游 墙纸 武侠小说 传奇 传奇世界 玉观音 向导 传奇私服 联众世界 诗歌 究成 边锋 天气 视讯会议 钻石 营养 足彩 空运 硬件 联盟 光端机 电动阀 杀毒 回流焊 帕萨特 吸塑 病毒 掌上电脑 课程 订酒店 移动硬盘 皇历 占卜 净化 测距仪 传媒 传奇3 免费 节能节电 国际机票 红斑狼疮 屏保 同盟 卷板机 财经 高考试题 乳腺病 短信联盟 办公设备 书库 切换器 剪报 招商 电子元器件 耐克 终端 短信同盟 运输 测量机 平衡机 数码冲印 上海大众 校校通 阀门 电脑硬件 美食 贷款 黑客帝国2 企业 晶闸管 足球鞋 网上聊天 网上冲印 二手市场 硬盘录像 市场调查 免费网站 电子书 中级会计师 钎焊 菜谱 台式机 鲜花速递 电视墙 深圳生活 blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog


 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.4 - 19 Jan 2005 - ArjanB)

 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.3 - 15 Feb 2004 - IsaacGouy)
Changed:
<
<

class Scissors extends GameMove? { toString()="Scissors"; }

class Paper extends GameMove? { toString()="Paper"; }

class Rock extends GameMove? { toString()="Rock"; }

>
>

class Scissors extends GameMove? {} class Paper extends GameMove? {} class Rock extends GameMove? {}

Changed:
<
<

>
>

toString(Scissors m)="Scissors"; toString(Paper m)="Paper"; toString(Rock m)="Rock";

Deleted:
<
<

toString()="Paper"; Specialize the toString() implementation for each subclass.


 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.2 - 11 Feb 2004 - IsaacGouy)
Changed:
<
<

plays(Scissors m1, Rock m2) = "Rock blunts Scissors";

>
>

plays(Scissors m1, Rock m2) = "Rock breaks Scissors";

Changed:
<
<

plays(Scissors m1, Rock m2) = "Rock blunts Scissors";

>
>

plays(Scissors m1, Rock m2) = "Rock breaks Scissors";

Changed:
<
<

Rock blunts Scissors

>
>

Rock breaks Scissors


 <<O>>  Difference Topic ScissorsPaperRockNoviceExample (r1.1 - 10 Feb 2004 - IsaacGouy)
Added:
>
>

%META:TOPICINFO{author="IsaacGouy" date="1076450880" format="1.0" version="1.1"}% %META:TOPICPARENT{name="CodeExamples"}%

/*
From the command line
1) create a directory scissors
2) cd into directory scissors
3) save this source code as main.nice in directory scissors
4) compile the source code
   \scissors> nicec --sourcepath=.. -a scissors.jar scissors
5) run the jar file
   \scissors> java -jar scissors.jar
*/


abstract class GameMove {}

class Scissors extends GameMove { 
   toString()="Scissors"; 
}

class Paper extends GameMove { 
   toString()="Paper"; 
}

class Rock extends GameMove { 
   toString()="Rock"; 
}



String plays(GameMove m1, GameMove m2){
   if (m1 == m2) return m1 + " draws " + m2;
   else return m2.plays(m1);
}

plays(Scissors m1, Paper m2) = "Scissors cut Paper";
plays(Paper m1, Rock m2) = "Paper wraps Rock";
plays(Scissors m1, Rock m2) = "Rock blunts Scissors";



void main(String[] args){
   let scissors = new Scissors();
   let rock = new Rock();
   let paper = new Paper();

   println( rock.plays(scissors) );
   println( rock.plays(paper) );
   println( scissors.plays(paper) );
   println( scissors.plays(scissors) );
}



/* Notes - language

   abstract class GameMove {}
Declare an abstract class and 3 subclasses: Scissors, Paper, Rock.

   toString()="Paper"; 
Specialize the toString() implementation for each subclass.

   String plays(GameMove m1, GameMove m2){
Declare a multimethod with an implementation - if the moves are
the same it's a draw, if the moves are different then there 
should be a more specific implementation so reverse the parameters
and try again (double dispatch).

   plays(Scissors m1, Paper m2) = "Scissors cut Paper";
This implementation will be selected when the first parameter value
is an instance of Scissors and the second parameter value is an 
instance of Paper (or a subclass).

   plays(Paper m1, Rock m2) = "Paper wraps Rock";
This implementation will be selected when the first parameter value
is an instance of Paper and the second parameter value is an 
instance of Rock (or a subclass).

   plays(Scissors m1, Rock m2) = "Rock blunts Scissors";
This implementation will be selected when the first parameter value
is an instance of Scissors and the second parameter value is an 
instance of Rock (or a subclass).


   We could implement the game using value dispatch. 
   Can you rewrite Scissors, Paper, Rock; using an enum, 
   or int constants or string literals?

*/

/* Notes - Compile & Run
The Nice compiler compiles PACKAGES (directories) not files, 
so we must tell the compiler which directory contains the 
package directory (scissors) not which directory contains
the file (main.nice).

   \projects> nicec scissors 
   OK

   \projects\scissors> nicec --sourcepath=.. scissors 
   OK

   \projects\scissors> nicec scissors 
   FAILS! the compiler will try to find \projects\scissors\scissors


Let's make the compiler output to a jar file (scissors.jar):

   \projects\scissors> nicec --sourcepath=.. -a scissors.jar scissors
   nice.lang: parsing
   scissors: parsing
   scissors: typechecking
   scissors: generating code
   scissors: linking
   scissors: writing in archive
   nice.lang: writing in archive


Let's run the program:

   \projects\scissors> java -jar scissors.jar
   Rock blunts Scissors
   Paper wraps Rock
   Scissors cut Paper
   Scissors draws Scissors
*/
-- IsaacGouy - 10 Feb 2004

Topic ScissorsPaperRockNoviceExample . { View | Diffs | r1.6 | > | r1.5 | > | r1.4 | More }
Revision r1.1 - 10 Feb 2004 - 22:08 GMT - IsaacGouy
Revision r1.6 - 28 Apr 2005 - 11:55 GMT - TWikiGuest
Copyright © 1999-2003 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback.