Java 石头剪刀图形小程序的对象与类方法编程?
我必须做一个设计某种游戏的最后项目,我决定用石头剪刀。我开始编写程序时没有考虑任何面向对象的编程风格,并且意识到我必须修改它才能为项目获得最大分数。然而,当我以面向对象的形式重写它时,它将无法像没有面向对象的方式创建的那样工作 这是我的OOP程序:Java 石头剪刀图形小程序的对象与类方法编程?,java,oop,applet,Java,Oop,Applet,我必须做一个设计某种游戏的最后项目,我决定用石头剪刀。我开始编写程序时没有考虑任何面向对象的编程风格,并且意识到我必须修改它才能为项目获得最大分数。然而,当我以面向对象的形式重写它时,它将无法像没有面向对象的方式创建的那样工作 这是我的OOP程序: import javax.swing.*; import java.awt.*; import java.applet.*; import java.util.Scanner; import java.util.Arrays; public cla
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.util.Scanner;
import java.util.Arrays;
public class RockPaperScissorss extends Applet
{
protected String answer;
protected Image rock, paper, scissors;
protected boolean playAgain;
public void init()
{
answer = Expo.enterStringGUI("What is your first draw?");
rock = getImage(getDocumentBase(),"Rock.gif");
paper = getImage(getDocumentBase(),"Paper.gif");
scissors = getImage(getDocumentBase(),"Scissors.gif");
}
public void paint(Graphics g)
{
Output output = new Output();
playAgain = true;
while(playAgain == true)
{
output.displayYouAndComp(g);
output.getCompDraw();
output.displayPic1(g);
output.displayComp1(g);
output.whoWon();
output.printResult(g);
output.playAgain();
if(playAgain == true)
init();
}
}
}
class Initialize extends RockPaperScissorss
{
protected String again;
public void displayYouAndComp(Graphics g)
{
Expo.setFont(g,"Algerian",Font.BOLD,50);
Expo.drawString(g,"You",0,50);
Expo.drawString(g,"Computer",500,50);
}
public boolean playAgain()
{
again = Expo.enterStringGUI("Would you like to play again? (Y/N)");
if(again.equals("Y") || again.equals("y"))
playAgain = true;
else
playAgain = false;
return playAgain;
}
}
class Person extends Initialize
{
public void displayPic1(Graphics g)
{
if(answer.equals("rock"))
g.drawImage(rock,0,100,this);
else if(answer.equals("paper"))
g.drawImage(paper,0,100,this);
else
g.drawImage(scissors,0,100,this);
}
}
class Computer extends Person
{
protected int draw;
public void getCompDraw()
{
draw = Expo.random(0,2);
}
public void displayComp1(Graphics g)
{
if(draw == 1)
g.drawImage(rock,500,100,this);
else if(draw == 2)
g.drawImage(paper,500,100,this);
else
g.drawImage(scissors,500,100,this);
}
}
class Output extends Computer
{
protected boolean won;
protected int tieGame;
protected String result;
protected String newArray[];
public String[] whoWon()
{
newArray = new String[1];
String personAnswers[] = {answer};
int compAnswers[] = {draw};
for(int k = 0; k < 1; k++)
{
if(personAnswers[k].equals("rock"))
{
switch(compAnswers[k])
{
case 1: //rock
newArray[k] = "tie";
break;
case 2: //paper
newArray[k] = "loss";
break;
case 3: //scissors
newArray[k] = "win";
break;
}
}
else if(personAnswers[k].equals("paper"))
{
switch(compAnswers[k])
{
case 1:
newArray[k] = "win";
break;
case 2:
newArray[k] = "tie";
break;
case 3:
newArray[k] = "loss";
break;
}
}
else
{
switch(compAnswers[k]) //equals scissors
{
case 1:
newArray[k] = "loss";
break;
case 2:
newArray[k] = "win";
break;
case 3:
newArray[k] = "tie";
break;
}
}
}
return newArray;
}
public void printResult(Graphics g)
{
String[] result = newArray;
Expo.setFont(g,"Algerian",Font.BOLD,50);
int x = 200;
for(int k = 0; k < 1; k++)
{
if(result[k].equals("loss"))
Expo.drawString(g,"You lost!",700,x);
else if(result[k].equals("tie"))
Expo.drawString(g,"It's a tie!",700,x);
else
Expo.drawString(g,"You won!",700,x);
}
}
}
import javax.swing.*;
导入java.awt.*;
导入java.applet.*;
导入java.util.Scanner;
导入java.util.array;
公共类RockPaperScissor扩展小程序
{
保护字符串应答;
受保护的图像:石头、布、剪刀;
再次受到保护;
公共void init()
{
答案=Expo.enterStringGUI(“你的第一张画是什么?”);
rock=getImage(getDocumentBase(),“rock.gif”);
paper=getImage(getDocumentBase(),“paper.gif”);
剪刀=getImage(getDocumentBase(),“scissors.gif”);
}
公共空间涂料(图g)
{
输出=新输出();
再次播放=正确;
while(再次播放==true)
{
输出。显示you和comp(g);
output.getCompDraw();
输出。显示PIC1(g);
输出.displayComp1(g);
output.whowen();
输出打印结果(g);
output.playreach();
如果(再次播放==真)
init();
}
}
}
类初始化扩展RockPaperScissor
{
再次保护字符串;
公共无效显示You和Comp(图g)
{
Expo.setFont(g,“阿尔及利亚”,字体粗体,50);
世博会拉丝(g,“你”,0,50);
世博会。拉丝(g,“计算机”,500,50);
}
公共布尔值
{
再次=Expo.enterStringGUI(“您想再次玩吗?(Y/N)”);
如果(再次.equals(“Y”)|再次.equals(“Y”))
再次播放=正确;
其他的
再次播放=错误;
再回来玩;
}
}
类Person扩展初始化
{
公共空白显示PIC1(图g)
{
如果(答案等于(“岩石”))
g、 drawImage(rock,0100,本);
否则,如果(答案等于(“纸”))
g、 drawImage(纸张,0100,本);
其他的
g、 drawImage(剪刀,0100,本);
}
}
类计算机扩展人
{
保护整数绘制;
public void getCompDraw()
{
抽签=博览会随机(0,2);
}
公共无效显示组件1(图形g)
{
如果(绘图==1)
g、 drawImage(岩石,500100,本);
否则如果(绘图==2)
g、 drawImage(纸张,500100,本);
其他的
g、 drawImage(剪刀,500100,本);
}
}
类输出扩展了计算机
{
受保护的布尔元;
受保护的游戏;
保护字符串结果;
受保护字符串newArray[];
公共字符串[]whowen()
{
newArray=新字符串[1];
字符串personAnswers[]={answer};
int compAnswers[]={draw};
对于(int k=0;k<1;k++)
{
if(personAnswers[k].equals(“rock”))
{
交换机(扩展器[k])
{
案例1://岩石
newArray[k]=“tie”;
打破
案例2://文件
newArray[k]=“丢失”;
打破
案例3://剪刀
newArray[k]=“赢”;
打破
}
}
else if(personAnswers[k].等于(“纸张”))
{
交换机(扩展器[k])
{
案例1:
newArray[k]=“赢”;
打破
案例2:
newArray[k]=“tie”;
打破
案例3:
newArray[k]=“丢失”;
打破
}
}
其他的
{
开关(compAnswers[k])//等于剪刀
{
案例1:
newArray[k]=“丢失”;
打破
案例2:
newArray[k]=“赢”;
打破
案例3:
newArray[k]=“tie”;
打破
}
}
}
返回新数组;
}
公共作废打印结果(图形g)
{
String[]result=newArray;
Expo.setFont(g,“阿尔及利亚”,字体粗体,50);
int x=200;
对于(int k=0;k<1;k++)
{
如果(结果[k]。等于(“损失”))
世博会拉丝(g,“你输了!”,700,x);
else if(结果[k].equals(“tie”))
世博会用的抽绳(g,“这是一条领带!”,700,x);
其他的
世博会用的抽绳(g,“你赢了!”,700,x);
}
}
}
与我的非OOP代码相比:
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.util.Scanner;
import java.util.Arrays;
public class RockPaperScissorsss extends Applet
{
String answer1, answer2, answer3; //first draw, etc.
int firstDraw, secondDraw, thirdDraw;
int tieGame;
String[] newArray;
Image rock, paper, scissors;
boolean playAgain;
String again;
public void init()
{
answer1 = Expo.enterStringGUI("What is your first draw?");
rock = getImage(getDocumentBase(),"Rock.gif");
paper = getImage(getDocumentBase(),"Paper.gif");
scissors = getImage(getDocumentBase(),"Scissors.gif");
newArray = new String[1];
}
public void paint(Graphics g)
{
playAgain = true;
while(playAgain == true)
{
displayYouAndComp(g);
getCompDraw();
displayPic1(g);
displayComp1(g);
whoWon();
printResult(g);
playAgain();
if(playAgain == true)
init();
}
}
public boolean playAgain()
{
again = Expo.enterStringGUI("Would you like to play again? (Y/N)");
if(again.equals("Y") || again.equals("y"))
playAgain = true;
else
playAgain = false;
return playAgain;
}
public void displayYouAndComp(Graphics g)
{
Expo.setFont(g,"Algerian",Font.BOLD,50);
Expo.drawString(g,"You",0,50);
Expo.drawString(g,"Computer",500,50);
}
public void getCompDraw()
{
firstDraw = Expo.random(0,2);
secondDraw = Expo.random(0,2);
thirdDraw = Expo.random(0,2);
}
public void displayPic1(Graphics g)
{
if(answer1.equals("rock"))
g.drawImage(rock,0,100,this);
else if(answer1.equals("paper"))
g.drawImage(paper,0,100,this);
else
g.drawImage(scissors,0,100,this);
}
public void displayComp1(Graphics g)
{
if(firstDraw == 1)
g.drawImage(rock,500,100,this);
else if(firstDraw == 2)
g.drawImage(paper,500,100,this);
else
g.drawImage(scissors,500,100,this);
}
public String[] whoWon()
{
String personAnswers[] = {answer1};
int compAnswers[] = {firstDraw};
for(int k = 0; k < 1; k++)
{
if(personAnswers[k].equals("rock"))
{
switch(compAnswers[k])
{
case 1: //rock
newArray[k] = "tie";
break;
case 2: //paper
newArray[k] = "loss";
break;
case 3: //scissors
newArray[k] = "win";
break;
}
}
else if(personAnswers[k].equals("paper"))
{
switch(compAnswers[k])
{
case 1:
newArray[k] = "win";
break;
case 2:
newArray[k] = "tie";
break;
case 3:
newArray[k] = "loss";
break;
}
}
else
{
switch(compAnswers[k]) //equals scissors
{
case 1:
newArray[k] = "loss";
break;
case 2:
newArray[k] = "win";
break;
case 3:
newArray[k] = "tie";
break;
}
}
}
return newArray;
}
public void printResult(Graphics g)
{
String[] result = newArray;
Expo.setFont(g,"Algerian",Font.BOLD,50);
int x = 200;
for(int k = 0; k < 1; k++)
{
if(result[k].equals("loss"))
Expo.drawString(g,"You lost!",700,x);
else if(result[k].equals("tie"))
Expo.drawString(g,"It's a tie!",700,x);
else
Expo.drawString(g,"You won!",700,x);
x += 200;
}
}
}
import javax.swing.*;
导入java.awt.*;
导入java.applet.*;
导入java.util.Scanner;
导入java.util.array;
公共类RockPaperScissors扩展小程序
{
字符串answer1、answer2、answer3;//第一次抽签,等等。
int firstDraw、secondDraw、thirdDraw;
国际比赛;
字符串[]新数组;
像石头、布、剪刀;
再次布尔播放;
再串一次;
公共void init()
{
answer1=Expo.enterStringGUI(“你的第一张画是什么?”);
rock=getImage(getDocumentBase(),“rock.gif”);
paper=getImage(getDocumentBase(),“paper.gif”);
剪刀=getImage(getDocumentBase(),“scissors.gif”);
newArray=新字符串[1];
}
公共空间涂料(图g)
{
再次播放=正确;
while(再次播放==true)
{
显示you和comp(g);
getCompDraw();
显示PIC1(g);
显示comp1(g);
whowen();
打印结果(g