工作日志3——模型代码

人员分工

周志豪:组长,写文档

崔世昂:原型系统的实现

田希宇:进行进阶的测试

张峻杰:管理博客,ppt展示

代码实现功能点及代码:

  1. 购买棋子

输入BC进入购买页面,输入1-5购买,0刷新,-1退出

case "BC":{

if(Bought==false) {

p1.BuyChess();

System.out.println("========已退出购买页面========");

Bought=true;

}

else System.out.println("你已经买过了!");

break;

}

  1. 购买经验

输入BE购买经验

                    case "BE":{

if(p1.Coins<5) {

System.out.println("你的钱不够!");

break;

}

else {

if(p1.Grade<=10) {

System.out.println("========金币-5,经验+4========");

p1.Coins-=5;

p1.Experience+=4;

if(p1.Experience>=p1.LevelUpExperienceOnGrade[p1.Grade]) {

p1.Experience-=p1.LevelUpExperienceOnGrade[p1.Grade];

p1.Grade++;

}

break;

}

else {

System.out.println("你已经满级了,不需要买经验了!");

break;

}

}

}

  1. 卖棋子

输入SC卖棋子

case "SC":{

p1.SellChess();

System.out.println("========已退出卖棋页面========");

break;

}

4.合成棋子

case "CC":{

p1.CombineChess();

System.out.println("========已退出合棋页面========");

break;

}

5.下个回合

输入NT进入下个回合

case "NT":{

System.out.println("========即将开始下一回合========");

Next=true;

break;

}

总共的代码量是475行

全部代码:

①Chess.java

package Game;

public class Chess {

public String Name=new String();

public String Quality=new String();

public int Cost;

public Chess(String name,String quality,int cost) {

this.Name=name;

this.Quality=quality;

this.Cost=cost;

}

}

②PlayerModel.java

package Interface;

public interface PlayerModel {

public void Init();

public void BuyChess();

public void CombineChess();

public void SellChess();

public void Update();

}

③Player.java

package Game;

import Interface.PlayerModel;

import java.util.*;

import java.io.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class Player implements PlayerModel {

public int Round;

private int Grade;

private int Experience;

private int Coins;

private int ConstantWinning;

private int ConstantFailing;

private int interest=0;

private String Name;

public int[] ChessCostOnGrade= {0,1,2,3,3,4,4,4,5,5,5};

public int[] LevelUpExperienceOnGrade= {1,1,1,2,4,8,16,24,32,40};

private LinkedList<Chess> MyChess;

private LinkedList<Chess> Library;

public static void main(String[] args) {

// TODO Auto-generated method stub

String Order=new String();

Scanner in=new Scanner(System.in);

boolean Bought;

boolean Next;

Player p1=new Player();

p1.Init();

System.out.println("AutoChess 抽棋模拟");

System.out.println("=================");

System.out.println("游戏规则:");

System.out.println("输入不同的文本来进行操作:\n"

+ "BC 表示 BuyChess\n"

+ "BE 表示BuyExperience\n"

+ "SC 表示 SellChess\n"

+ "CC 表示 CombineChess\n"

+ "NT 表示 NextTurn");

while(true) {

p1.Update();

Bought=false;

Next=false;

while(Next==false) {

p1.Show();

switch(Order=in.next()) {

case "BC":{

if(Bought==false) {

p1.BuyChess();

System.out.println("========已退出购买页面========");

Bought=true;

}

else System.out.println("你已经买过了!");

break;

}

case "BE":{

if(p1.Coins<5) {

System.out.println("你的钱不够!");

break;

}

else {

if(p1.Grade<=10) {

System.out.println("========金币-5,经验+4========");

p1.Coins-=5;

p1.Experience+=4;

if(p1.Experience>=p1.LevelUpExperienceOnGrade[p1.Grade]) {

p1.Experience-=p1.LevelUpExperienceOnGrade[p1.Grade];

p1.Grade++;

}

break;

}

else {

System.out.println("你已经满级了,不需要买经验了!");

break;

}

}

}

case "SC":{

p1.SellChess();

System.out.println("========已退出卖棋页面========");

break;

}

case "CC":{

p1.CombineChess();

System.out.println("========已退出合棋页面========");

break;

}

case "NT":{

System.out.println("========即将开始下一回合========");

Next=true;

break;

}

default:{

System.out.println("你输错了,请输入正确的指令!");

break;

}

}

}

}

}

@Override

public void Init() {

// TODO Auto-generated method stub

this.Round=0;

this.Grade=0;

this.Experience=0;

this.Coins=100;

this.ConstantWinning=0;

this.ConstantFailing=0;

this.interest=0;

this.MyChess=new LinkedList<Chess>();

this.Library=new LinkedList<Chess>();

Scanner in=new Scanner(System.in);

System.out.println("=================");

System.out.println("请输入名称:");

this.Name=in.next();

for(int i=0;i<9;i++) {

this.Library.add(new Chess("潮汐猎人","传说",5));

this.Library.add(new Chess("迷团","传说",5));

this.Library.add(new Chess("地精工程师","传说",5));

this.Library.add(new Chess("巫妖","传说",5));

this.Library.add(new Chess("矮人直升机","传说",5));

this.Library.add(new Chess("利爪德鲁伊","史诗",4));

this.Library.add(new Chess("龙骑士","史诗",4));

this.Library.add(new Chess("蛇发女妖","史诗",4));

this.Library.add(new Chess("干扰者","史诗",4));

this.Library.add(new Chess("炼金术士","史诗",4));

this.Library.add(new Chess("圣堂刺客","史诗",4));

this.Library.add(new Chess("死灵法师","史诗",4));

this.Library.add(new Chess("光之守卫","史诗",4));

this.Library.add(new Chess("巨魔战将","史诗",4));

this.Library.add(new Chess("海军上将","史诗",4));

this.Library.add(new Chess("末日使者","史诗",4));

this.Library.add(new Chess("秀逗魔法师","稀有",3));

this.Library.add(new Chess("影魔","稀有",3));

this.Library.add(new Chess("冥界亚龙","稀有",3));

this.Library.add(new Chess("狙击手","稀有",3));

this.Library.add(new Chess("鱼人夜行者","稀有",3));

this.Library.add(new Chess("沙王","稀有",3));

this.Library.add(new Chess("死亡骑士","稀有",3));

this.Library.add(new Chess("幻影刺客","稀有",3));

this.Library.add(new Chess("风行者","稀有",3));

this.Library.add(new Chess("闪电幽魂","稀有",3));

this.Library.add(new Chess("全能骑士","稀有",3));

this.Library.add(new Chess("剧毒术士","稀有",3));

this.Library.add(new Chess("狼人","稀有",3));

this.Library.add(new Chess("先知","普通",2));

this.Library.add(new Chess("月之骑士","普通",2));

this.Library.add(new Chess("树精卫士","普通",2));

this.Library.add(new Chess("混沌骑士","普通",2));

this.Library.add(new Chess("鱼人守卫","普通",2));

this.Library.add(new Chess("巫医","普通",2));

this.Library.add(new Chess("精灵龙","普通",2));

this.Library.add(new Chess("痛苦女王","普通",2));

this.Library.add(new Chess("伐木机","普通",2));

this.Library.add(new Chess("剑圣","普通",2));

this.Library.add(new Chess("兽王","普通",2));

this.Library.add(new Chess("水晶室女","普通",2));

this.Library.add(new Chess("敌法师","基础",1));

this.Library.add(new Chess("修补匠","基础",1));

this.Library.add(new Chess("蝙蝠骑士","基础",1));

this.Library.add(new Chess("暗影萨满","基础",1));

this.Library.add(new Chess("发条技师","基础",1));

this.Library.add(new Chess("赏金猎人","基础",1));

this.Library.add(new Chess("卓尔游侠","基础",1));

this.Library.add(new Chess("巨牙海民","基础",1));

this.Library.add(new Chess("食人魔魔法师","基础",1));

this.Library.add(new Chess("魅惑魔女","基础",1));

this.Library.add(new Chess("斧王","基础",1));

}

}

@Override

public void CombineChess() {

// TODO Auto-generated method stub

int i,index1,index2;

Chess c;

System.out.println("========已进入合棋界面========");

if(this.MyChess.size()<=1) {

System.out.println("你没有棋子可以合!");

}

else {

System.out.println("=================");

for(i=0;i<this.MyChess.size();i++) {

c=this.MyChess.get(i);

System.out.println(i+1+":"+" "+c.Name+":"+c.Cost);

}

System.out.println("*****************");

System.out.println("请输入要合成的两个棋子的序号,用空格分开");

Scanner in=new Scanner(System.in);

index1=in.nextInt();

index2=in.nextInt();

Chess c1,c2;

c1=this.MyChess.get(index1-1);

c2=this.MyChess.get(index2-1);

if(c1.Name!=c2.Name) System.out.println("你输错了!");

else {

c1.Name+="Plus ";

c1.Cost*=2;

this.MyChess.remove(index2-1);

}

this.Show();

}

}

@Override

public void SellChess() {

// TODO Auto-generated method stub

int i,place;

Chess c;

System.out.println("========已进入卖棋界面========");

if(this.MyChess.size()==0) {

System.out.println("你没有棋子可以卖!");

}

else {

System.out.println("=================");

for(i=0;i<this.MyChess.size();i++) {

c=this.MyChess.get(i);

System.out.println(i+1+":"+" "+c.Name+":"+(c.Cost/2));

}

System.out.println("*****************");

System.out.println("请输入要卖的棋子的序号");

Scanner in=new Scanner(System.in);

place=in.nextInt()-1;

this.Coins+=this.MyChess.get(place).Cost/2;

this.MyChess.remove(place);

this.Show();

}

}

@Override

public void Update() {

// TODO Auto-generated method stub

this.Round++;

System.out.println("========"+"回合 "+this.Round+" 开始了"+"========");

this.Experience+=1;

this.Coins+=5;

this.Coins+=this.interest;

this.interest=this.Coins/10;

if(this.Experience>=this.LevelUpExperienceOnGrade[this.Grade]) {

this.Experience-=this.LevelUpExperienceOnGrade[this.Grade];

this.Grade++;

}

}

public void Show() {

System.out.println("=================");

System.out.println("名称: "+this.Name);

System.out.println("回合: "+this.Round);

System.out.println("等级: "+this.Grade);

System.out.println("经验: "+this.Experience);

System.out.println("金币: "+this.Coins);

System.out.println("连胜: "+this.ConstantWinning);

System.out.println("连败: "+this.ConstantFailing);

System.out.println("利息: "+this.interest);

System.out.println("*****************");

System.out.println("人口: "+this.Grade);

System.out.println("棋子如下:");

for(int i=0;i<this.MyChess.size();i++) {

switch(MyChess.get(i).Quality) {

case "基础":{

System.out.println(this.MyChess.get(i).Name+" ★");

break;

}

case "普通":{

System.out.println(this.MyChess.get(i).Name+" ★★");

break;

}

case "稀有":{

System.out.println(this.MyChess.get(i).Name+" ★★★");

break;

}

case "史诗":{

System.out.println(this.MyChess.get(i).Name+" ★★★★");

break;

}

case "传说":{

System.out.println(this.MyChess.get(i).Name+" ★★★★★");

break;

}

}

}

System.out.println("=================");

}

@Override

public void BuyChess() {

// TODO Auto-generated method stub

Random rand=new Random();

Scanner in=new Scanner(System.in);

String Order=new String();

int start=this.Library.size();

int i;

boolean CanRefresh=true,breakout=false;

int[] places=new int[5];

LinkedList<Chess> SellingChess=new LinkedList<Chess>();

Chess c=new Chess("无","无",6);

while(CanRefresh==true) {

System.out.println("========已进入购买界面========");

SellingChess.removeAll(SellingChess);

for(i=0;i<5;i++) {

c=new Chess("无","无",6);

while(c.Cost>this.ChessCostOnGrade[this.Grade]) {

places[i]=rand.nextInt(start-i);

c=this.Library.get(places[i]);

}

SellingChess.add(new Chess(c.Name,c.Quality,c.Cost));

}

System.out.println("=================");

for(i=0;i<5;i++) {

c=SellingChess.get(i);

System.out.println((i+1)+":"+" "+c.Name+" "+c.Quality+" "+c.Cost);

}

System.out.println("=================");

breakout=false;

while(!breakout) {

System.out.println("请输入要购买的棋子的序号,不可重复购买同一序号棋子,输入0刷新,输入-1退出");

switch(in.nextInt()) {

case -1:{

breakout=true;

CanRefresh=false;

break;

}

case 0:{

if(this.Coins<2) {

CanRefresh=false;

breakout=true;

break;

}

else {

CanRefresh=true;

breakout=true;

this.Coins-=2;

break;

}

}

case 1:{

if(this.Grade<=this.MyChess.size()) {

System.out.println("人口已满");

breakout=true;

CanRefresh=false;

break;

}

if(this.Coins>SellingChess.get(0).Cost) {

this.MyChess.add(SellingChess.get(0));

this.Coins-=SellingChess.get(0).Cost;

this.Library.remove(places[0]);

start--;

this.Show();

break;

}

else {

System.out.println("你买不起!");

break;

}

}

case 2:{

if(this.Grade<=this.MyChess.size()) {

System.out.println("人口已满");

breakout=true;

CanRefresh=false;

break;

}

if(this.Coins>SellingChess.get(1).Cost) {

this.MyChess.add(SellingChess.get(1));

this.Coins-=SellingChess.get(1).Cost;

this.Library.remove(places[1]);

start--;

this.Show();

break;

}

else {

System.out.println("你买不起!");

break;

}

}

case 3:{

if(this.Grade<=this.MyChess.size()) {

System.out.println("人口已满");

breakout=true;

CanRefresh=false;

break;

}

if(this.Coins>SellingChess.get(2).Cost) {

this.MyChess.add(SellingChess.get(2));

this.Coins-=SellingChess.get(2).Cost;

this.Library.remove(places[2]);

start--;

this.Show();

break;

}

else {

System.out.println("你买不起!");

break;

}

}

case 4:{

if(this.Grade<=this.MyChess.size()) {

System.out.println("人口已满");

breakout=true;

CanRefresh=false;

break;

}

if(this.Coins>SellingChess.get(3).Cost) {

this.MyChess.add(SellingChess.get(3));

this.Coins-=SellingChess.get(3).Cost;

this.Library.remove(places[3]);

start--;

this.Show();

break;

}

else {

System.out.println("你买不起!");

break;

}

}

case 5:{

if(this.Grade<=this.MyChess.size()) {

System.out.println("人口已满");

breakout=true;

CanRefresh=false;

break;

}

if(this.Coins>SellingChess.get(4).Cost) {

this.MyChess.add(SellingChess.get(4));

this.Coins-=SellingChess.get(4).Cost;

this.Library.remove(places[4]);

start--;

this.Show();

break;

}

else {

System.out.println("你买不起!");

break;

}

}

default:{

System.out.println("你输错了!");

break;

}

}

}

}

}

}

进阶项:

1.我们完美模拟了自走棋抽棋的部分,并且为了功能需要添加了金币,经验等多个系统,实现了对自走棋抽棋需求的更加立体的满足。

2.模型操作简便,易上手,可用性较强。简洁明了,能更加明确的体现抽到的棋子和待购区的棋子,充分考虑了用户的使用体验。

3.虽然没有实现图形界面,但是命令行所有的文字提示基本上提供了所有用户需要的信息,因此每次用户抽棋都会给出下一步提示,直观明了。

原文地址:https://www.cnblogs.com/Group-5/p/11013188.html

时间: 2024-08-29 17:42:15

工作日志3——模型代码的相关文章

Windows Socket五种I/O模型——代码全攻略(转)

Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻

12.16~12.23工作日志

12.16~12.23工作日志 2016.12.16 1.cick事件调用的函数中加入touchmove等事件会发生事件穿透,详情(http://www.tuicool.com/articles/6NfaUnM) 移动设备的click事件有300ms延迟,用于判断是否双击 2.ios设备会有一个默认的css样式,如input按钮在电脑上默认为方形,而在iPhone上默认为圆形,清除ipone默认样式方法: Input{-webkit-appearance:none;} 3.border-radi

WCF 代理 是怎么工作的?用代码说话

1.WCF生成代理的方式 2.WCF代理原理 第一个问题引用 一篇Robin's博文[WCF生成客户端对象方式解析] 讲述了创建客户端服务对象的方法 1.代理构造法 a.开启服务后,添加服务引用 b.知道元数据地址,通过svcutli.exe生成代理类和配置文件 c.从服务契约DLL中导出元数据,然后更具本地的元数据文件生成代理类和配置文件 d.知道元数据地址,自己编写代码生成(使用ServiceContractGenerator类等),生成代理类和配置文件 2.通道工厂(ChannelFact

将datagrid中数据导出到excel中 -------&lt;&lt;工作日志2014-6-6&gt;&gt;

1.下载log4j jar包,放入lib目录, 导入项目中   下载地址 http://logging.apache.org/ 2.创建log4j.properties 文件  目录 Src  下面是一个 log4j.properties的例子(注:来源于网上,非本人所写) ################################################################################ # 其语法:log4j.rootLogger = [ leve

工作日志2014-07-01

6:00起床 6:40出门 7:30到旅顺 8:30到七贤岭 12:00吃饭 15:20帮忙测试数据结束 工作时间: iOS百度云推送[未完成,问题就是没有按教程一步一步来] 看以前关于处理table的代码 今天支出:48元 工作日志2014-07-01

使用SharePoint Designer定制开发员工工作日志系统实例!

昨天已介绍了一篇<使用SharePoint Designer定制开发专家库系统实例!>,今天继续来介绍使用SharePoint Designer定制开发员工工作日志系统实例,主要功能包括填写日报.查看日报及点评日报等,这个是今年7月份的时候设计开发的一个实验系统,仅供学习参考.很多人可能并不清楚Sharepoint Designer究竟是啥东东?实际上Sharepoint Designer是Sharepoint自带的设计开发和管理工具,从Sharepoint 2007开始已有这个工具,但需要单

ubuntu下定时弹窗记录工作日志

背景 记录工作日志,是一个很好的习惯,但不容易坚持,本来打算每天记录,但经常拖延,拖着拖着,有一些事情就忘记了. 等到写周报或月报的时候,才会开始翻邮件,聊天记录,各个仓库的提交log等,回忆都干了些啥. 为了解决这个问题,需要有一个工具来帮助我,提高工作日志的完成度. 最开始的设想是,自动定时发送一个邮件或聊天消息,在其中回复工作记录.但转念一想,公司的系统就是这么做的,每天一封邮件提醒我写工作日志,但没什么实际作用.看来需要更加强力的提醒才行.想来想去,试试就用弹窗吧. 任务管理Taskwa

工作日志-20180707

摘要 「HHBchain」中使用了 CCXT 而且目前的项目是使用 celery 做的分布式,多个 CCXT 对象会在多个 celery worker 进程中被重复使用,这样就会存在 nonce 被重复的问题,所以这里必须对 CCXT 对象加锁.目前在研究锁方案. 「django-easy-validator」今天修复了几个小 BUG, 基本上已经能够使用了,最近要发一个新版本呢. 统计 工作时段 : 9:00 - 12:00, 14:00 - 19:00 工作时长 : 8 Hours 代码 :

工作日志 2020-02-26

工作日志 2020 年 2 月 26 日 第1工时 区间时间控件调整 同时,引用两个单时间控件,会使两个控件不协调 第2工时 时间控件 需要 最大值 最小值 涉及时分秒3个滚轮联动. 时的极值会导致分的值域变化.分秒同理. 但是设计时忽视这个问题. 导致现在得联动效果无法根据时分秒 分割开. 暂时没有有效的解决方法 第3工时 控件暂时调整到这. FORM TABLE 布局时今天的重点. 控件大中小迷你 4档 其中 中档对应高度35px 属于常规的高度设置. TABLE 控件的SCSS 调整 和功