请根据传统方式,改造为IoC方式实现。
传统方式:
项目共包括4个类:Computer类、User类、Game类和PlayGame类。
public class Computer {
public String name;
public int score;
public void chuquan(int i){
switch(i){
case 1:System.out.println("电脑出拳:剪刀");break;
case 2:System.out.println("电脑出拳:石头");break;
case 3:System.out.println("电脑出拳:布");break;
}
}
}
public class User {
public String name;
public int score;
public void chuquan(int i){
switch(i){
case 1:System.out.println("你出拳:剪刀");break;
case 2:System.out.println("你出拳:石头");break;
case 3:System.out.println("你出拳:布");break;
default:System.out.println("输入错误!此次输入无效!");break;
}
}
}
public class Game{
User u=new User();
Computer c=new Computer();
public int times;
//游戏初始化
public void init(){
u.name="匿名";
u.score=0;
c.name="匿名";
u.score=0;
times=0;
}
*public void computerPlayer(int input){
switch(input){
case 1:c.name="刘备";break;
case 2:c.name="孙权";break;
case 3:c.name="曹操";break;
}
}
public void user(String name){
u.name=name;
}
public void chuquan(int a){
if(a==1||a==2||a==3){
times+=1;
u.chuquan(a);
int b=(int)(Math.random()*3)+1;//产生一个1~3的随机数
c.chuquan(b);
if(a==1&&b==3||a==2&&b==1||a==3&&b==2){//若用户赢,分数+1
u.score+=1;
}else if(a==3&&b==1||a==1&&b==2||a==2&&b==1){//若电脑赢,分数+1
c.score+=1;
}
}else{
System.out.println("输入有误,请输入一个0~3的整数!");
}
}
public void jisuan(){
System.out.println("一共玩了:"+times+" 次! "+u.name+" 赢了:"+u.score+"次! "+c.name+" 赢了:"+c.score+"次!");
}
public void result(){
System.out.println("最后结果为:\n一共玩了:"+times+" 次! "+u.name+" 赢了:"+u.score+"次! "+c.name+" 赢了:"+c.score+"次!");
}
}
/***
*
* @本程序是一个人机互动猜拳小游戏
*/
import java.util.InputMismatchException;
import java.util.Scanner;
public class PlayGame {
public static void main(String[] args){
int juese;
int i;//i表示玩家出拳的数字
Game g=new Game();
g.init();
System.out.print("************************************\n");
System.out.print("** 欢迎进入猜拳游戏 ***\n");
System.out.print("************************************\n");
System.out.println("出拳规则:1.剪刀 2.石头 3.布\n");
System.out.println("请选择角色:1.刘备 2.孙权 3.曹操");
Scanner input=new Scanner(System.in);
try{
juese=input.nextInt();
while(juese!=1&&juese!=2&&juese!=3){//输入内容必须是一个1~3的整数,否则重新输入
System.out.println("输入的内容应该是一个1~3的整数,请重新输入!");
juese=input.nextInt();
}
g.computerPlayer(juese);
System.out.println("请输入您的姓名:");
g.user(input.next());
System.out.println("出拳:(输入0退出)");
i=input.nextInt();
while(i!=0){//若用户不输入0,执行循环体,一直玩游戏
g.chuquan(i);
g.jisuan();
System.out.println("\n出拳:(输入0退出)");
i=input.nextInt();
}
System.out.println("游戏结束!");
g.result();
}catch(InputMismatchException e){
System.out.println("程序运行出错:输入非法字符!");
}finally{
System.out.println("\n谢谢使用!");
}
input.close();
}
}
//User
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
public String name;
public int score;
public void chuquan(int i){
switch(i){
case 1:System.out.println("你出拳:剪刀");break;
case 2:System.out.println("你出拳:石头");break;
case 3:System.out.println("你出拳:布");break;
default:System.out.println("输入错误!此次输入无效!");break;
}
}
}
//Computer
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Computer implements Serializable {
public String name;
public int score;
public void chuquan(int i){
switch(i){
case 1:System.out.println("电脑出拳:剪刀");break;
case 2:System.out.println("电脑出拳:石头");break;
case 3:System.out.println("电脑出拳:布");break;
}
}
}
//接口
package com.zd.service;
public interface GeamService {
void computerPlayer(int input);
void user(String name);
void chuquan(int a);
void jisuan();
void result();
}
//接口实现类
package com.zd.service.Impl;
import com.zd.dao.GeamDao;
import com.zd.pojo.Computer;
import com.zd.pojo.User;
import com.zd.service.GeamService;
public class GeamServiceImpl implements GeamService {
private User u=null;
private Computer c=null;
private int times;
private GeamDao geamDao =null;
public void setGeamDao(GeamDao geamDao) {
this.geamDao = geamDao;
}
public void setU(User u) {
this.u = u;
}
public void setC(Computer c) {
this.c = c;
}
public void setTimes(int times) {
this.times = times;
}
@Override
public void computerPlayer(int input) {
c.name=geamDao.computerquery(input).name;
}
@Override
public void user(String name) {
u.name=name;
}
@Override
public void chuquan(int a) {
if(a==1||a==2||a==3){
times+=1;
u.chuquan(a);
int b=(int)(Math.random()*3)+1;//产生一个1~3的随机数
c.chuquan(b);
if(a==1&&b==3||a==2&&b==1||a==3&&b==2){//若用户赢,分数+1
u.score+=1;
}else if(a==3&&b==1||a==1&&b==2||a==2&&b==1){//若电脑赢,分数+1
c.score+=1;
}
}else{
System.out.println("输入有误,请输入一个0~3的整数!");
}
}
@Override
public void jisuan() {
System.out.println("一共玩了:"+times+" 次! "+u.name+" 赢了:"+u.score+"次! "+c.name+" 赢了:"+c.score+"次!");
}
@Override
public void result() {
System.out.println("最后结果为:\n一共玩了:"+times+" 次! "+u.name+" 赢了:"+u.score+"次! "+c.name+" 赢了:"+c.score+"次!");
}
}
//接口
package com.zd.dao;
import com.zd.pojo.Computer;
public interface GeamDao {
Computer computerquery(int i);
}
//接口实现类
package com.zd.dao.Impl;
import com.zd.dao.GeamDao;
import com.zd.pojo.Computer;
import java.util.List;
public class GeamDaoImpl implements GeamDao {
private List computerList;
public void setComputerList(List computerList) {
this.computerList = computerList;
}
@Override
public Computer computerquery(int i) {
return computerList.get(i-1);
}
}
package com.zd;
import com.zd.service.GeamService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.InputMismatchException;
import java.util.Scanner;
public class PlayGame {
public static void main(String[] args) {
ApplicationContext ac =new ClassPathXmlApplicationContext("ApplicationContext.xml");
GeamService service = (GeamService) ac.getBean("geamService");
int juese;
int i;//i表示玩家出拳的数字
System.out.print("************************************\n");
System.out.print("** 欢迎进入猜拳游戏 ***\n");
System.out.print("************************************\n");
System.out.println("出拳规则:1.剪刀 2.石头 3.布\n");
System.out.println("请选择角色:1.刘备 2.孙权 3.曹操");
Scanner input=new Scanner(System.in);
try{
juese=input.nextInt();
while(juese!=1&&juese!=2&&juese!=3){//输入内容必须是一个1~3的整数,否则重新输入
System.out.println("输入的内容应该是一个1~3的整数,请重新输入!");
juese=input.nextInt();
}
service.computerPlayer(juese);
System.out.println("请输入您的姓名:");
service.user(input.next());
System.out.println("出拳:(输入0退出)");
i=input.nextInt();
while(i!=0){//若用户不输入0,执行循环体,一直玩游戏
service.chuquan(i);
service.jisuan();
System.out.println("\n出拳:(输入0退出)");
i=input.nextInt();
}
System.out.println("游戏结束!");
service.result();
}catch(InputMismatchException e){
System.out.println("程序运行出错:输入非法字符!");
}finally{
System.out.println("\n谢谢使用!");
}
input.close();
}
}