記憶翻牌遊戲
這是一個記憶翻牌遊戲,需要兩名玩家,配對成功得5分且可繼續翻牌,連續配對成功獲得加成分數3分,當配對失敗時則換對方翻牌,直到無牌可翻就遊戲結束,得分高者為贏家!!
int[][] temp=new int[9][4]; //翻牌情況
String[] en={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"};
String[][] in=new String[9][4]; //存放牌的值
int x,y,c1=0,c2=0,T=0,player=1,P1_point=0,P2_point=0,bonus=0;
String t1,t2;
boolean change; //是否換人翻牌
void input(){
for(int i=0;i<9;i++){ //未翻牌=0,翻牌=1,固定=2
for(int j=0;j<4;j++){
temp[i][j]=1;
}
}
for(String k:en){
for(;;){
x=int(random(0,9));
y=int(random(0,4));
if(en[c1]==null) break; //確保不會有同個字被抓多次,EX:A出現三次
if(in[x][y]==null){
temp[x][y]=0; //變成0=未翻牌
en[c1]=null; //已取用的字拿掉,為了配合上面的確保機制
in[x][y]=k; //設定翻牌後的值
}
}
c1++;
}
}
void test(){ //測試用函數
for(int i=0;i<9;i++){ //未翻牌=0,翻牌=1,固定=2
for(int j=0;j<4;j++){
print(temp[i][j]); //測試翻牌情況
}
}
for(int i=0;i<9;i++){ //未翻牌=0,翻牌=1,固定=2
for(int j=0;j<4;j++){
print(in[i][j]); //測試值確實存在
}
}
println();
}
void setup(){
size(900,700); //設定介面大小
background(255); //白色背景
input(); //呼叫input()函數
test(); //呼叫test()函數
fill(0,0,0);
textSize(50);
textAlign(CENTER,CENTER); //文字置中
text("Player1: "+P1_point,150,650); //顯示目前得分
text("Player2: "+P2_point,750,650);
}
void draw(){
for(int i=0;i<10;i++){
line(i*100,0,i*100,600); //畫直線
line(0,i*150,900,i*150); //畫橫線
}
if(T>0){ //1秒鐘後進行兩張牌的比對
T--;
if(T==0 && c2==2){
check(); //比對
show(); //顯示
}
}
}
void mouseClicked(){
T=60;
if(temp[mouseX/100][mouseY/150] == 0) { //確認牌是沒有翻過的
c2++; //計算翻了幾次牌
if(c2==1){ //翻第一張牌
temp[mouseX/100][mouseY/150]=1; //翻牌
text(in[mouseX/100][mouseY/150],mouseX/100*100+50,mouseY/150*150+75); //顯示值
t1=in[mouseX/100][mouseY/150];
}else if(c2==2){ //翻第二張牌
temp[mouseX/100][mouseY/150]=1; //翻牌
text(in[mouseX/100][mouseY/150],mouseX/100*100+50,mouseY/150*150+75); //顯示值
t2=in[mouseX/100][mouseY/150];
}
}
}
void check(){
change=false;
if(t1==t2){
bonus++; //連續得分次數
if(player==1){
P1_point+=5;
if(bonus>1){ //連續得分的話,加成,多3分
P1_point+=3;
}
}else if(player==2){
P2_point+=5;
if(bonus>1){ //連續得分的話,加成,多3分
P2_point+=3;
}
}
for(int i=0;i<9;i++){
for(int j=0;j<4;j++){
if(in[i][j]==t1 || in[i][j]==t2){
temp[i][j]=2;
}
}
}
}else{
bonus=0;
change=true; //換人翻牌
if(change==true && player==1){
player=2;
}else if(change==true && player==2){
player=1;
}
for(int i=0;i<9;i++){
for(int j=0;j<4;j++){
if(in[i][j]==t1 || in[i][j]==t2){
temp[i][j]=0;
}
}
}
}
background(255);
c2=0; //新一輪選牌
}
void show(){
for(int i=0;i<9;i++){
for(int j=0;j<4;j++){
if(temp[i][j]==2){
text(in[i][j],i*100+50,j*150+75);
}
}
}
text("Player1: "+P1_point,150,650);
text("Player2: "+P2_point,750,650);
test(); //測試用
Gameover(); //檢測是否結束遊戲
}
void Gameover(){
boolean gameover=true;
for(int i=0;i<9;i++){
for(int j=0;j<4;j++){
if(temp[i][j]==0 || temp[i][j]==1){
gameover=false; //還有牌未翻,遊戲不能結束
}
}
}
if(gameover==true){
size(900,700);
background(255,235,205);
noStroke();
textSize(125);
textAlign(CENTER,CENTER); //文字置中
text("GAME OVER",450,200);
if(P1_point>P2_point){
text("PLAYER 1 WIN",450,400); //顯示贏家
}else{
text("PLAYER 2 WIN",450,500);
}
}
}
沒有留言:
張貼留言