上课案列-翻牌游戏(重置、历史记录)

布局文件:java

activity_main.xml:
1.<?xml version="1.0" encoding="utf-8"?>  
2.<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3.    xmlns:app="http://schemas.android.com/apk/res-auto"  
4.    xmlns:tools="http://schemas.android.com/tools"  
5.    android:layout_width="match_parent"  
6.    android:layout_height="match_parent"  
7.    tools:context=".MainActivity">  
8.  
9.    <android.support.v7.widget.RecyclerView  
10.        android:id="@+id/recyclerView"  
11.        android:layout_width="0dp"  
12.        android:layout_height="0dp"  
13.        android:layout_marginStart="8dp"  
14.        android:layout_marginLeft="8dp"  
15.        android:layout_marginTop="8dp"  
16.        android:layout_marginEnd="8dp"  
17.        android:layout_marginRight="8dp"  
18.        android:layout_marginBottom="8dp"  
19.        app:layout_constraintBottom_toTopOf="@+id/linearLayout"  
20.        app:layout_constraintEnd_toEndOf="parent"  
21.        app:layout_constraintStart_toStartOf="parent"  
22.        app:layout_constraintTop_toTopOf="parent" />  
23.  
24.    <LinearLayout  
25.        android:id="@+id/linearLayout"  
26.        android:layout_width="match_parent"  
27.        android:layout_height="60dp"  
28.        android:layout_marginStart="8dp"  
29.        android:layout_marginLeft="8dp"  
30.        android:layout_marginEnd="8dp"  
31.        android:layout_marginRight="8dp"  
32.        android:layout_marginBottom="8dp"  
33.        android:orientation="horizontal"  
34.        app:layout_constraintBottom_toBottomOf="parent"  
35.        app:layout_constraintEnd_toEndOf="parent"  
36.        app:layout_constraintStart_toStartOf="parent"  
37.        app:layout_constraintTop_toBottomOf="@+id/recyclerView">  
38.  
39.        <TextView  
40.            android:id="@+id/textView"  
41.            android:layout_width="wrap_content"  
42.            android:layout_height="wrap_content"  
43.            android:layout_weight="1"  
44.            android:text="score:" />  
45.  
46.        <Button  
47.            android:id="@+id/button"  
48.            android:layout_width="wrap_content"  
49.            android:layout_height="wrap_content"  
50.            android:onClick="reset"  
51.            android:text="reset" />  
52.  
53.        <Button  
54.            android:id="@+id/button2"  
55.            android:layout_width="wrap_content"  
56.            android:layout_height="wrap_content"  
57.            android:onClick="showHistory"  
58.            android:text="history" />  
59.    </LinearLayout>  
60.</android.support.constraint.ConstraintLayout>  
activity_history.xml
1.<?xml version="1.0" encoding="utf-8"?>  
2.<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3.    xmlns:app="http://schemas.android.com/apk/res-auto"  
4.    xmlns:tools="http://schemas.android.com/tools"  
5.    android:layout_width="match_parent"  
6.    android:layout_height="match_parent"  
7.    tools:context=".HistoryActivity">  
8.  
9.    <ListView  
10.        android:id="@+id/listView"  
11.        android:layout_width="0dp"  
12.        android:layout_height="0dp"  
13.        android:layout_marginStart="8dp"  
14.        android:layout_marginLeft="8dp"  
15.        android:layout_marginTop="8dp"  
16.        android:layout_marginEnd="8dp"  
17.        android:layout_marginRight="8dp"  
18.        android:layout_marginBottom="8dp"  
19.        app:layout_constraintBottom_toBottomOf="parent"  
20.        app:layout_constraintEnd_toEndOf="parent"  
21.        app:layout_constraintStart_toStartOf="parent"  
22.        app:layout_constraintTop_toTopOf="parent" />  
23.</android.support.constraint.ConstraintLayout>  

Java文件android

MainActivity.java
1.package com.example.recyclercardgame2;  
2.  
3.import android.support.annotation.NonNull;  
4.import android.support.v7.widget.RecyclerView;  
5.import android.view.View;  
6.import android.view.ViewGroup;  
7.import android.widget.Button;  
8.  
9.import com.example.recyclercardgame2.model.Card;  
10.import com.example.recyclercardgame2.model.CardMatchingGame;  
11.  
12.public class CardGameAdapter extends RecyclerView.Adapter<CardGameAdapter.ViewHolder> {  
13.  
14.    private CardMatchingGame game;  
15.    private View.OnClickListener monClickListener;  
16.  
17.    public void setonClickListener(View.OnClickListener monClickListener) {  
18.        this.monClickListener = monClickListener;  
19.    }  
20.  
21.  
22.    public CardGameAdapter(CardMatchingGame game) {  
23.        this.game = game;  
24.    }  
25.  
26.    @NonNull  
27.    @Override  
28.    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {  
29.        View view = new Button(viewGroup.getContext());  
30.        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,360));  
31.        ViewHolder viewHolder = new ViewHolder(view);  
32.        return viewHolder;  
33.    }  
34.  
35.    @Override  
36.    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {  
37.        Card card = game.cardAtIndex(i);  
38.  
39.        viewHolder.cardButton.setAlpha(card.isMatched() ? (float)0.5: 1);  
40.        if(card.isChosen()){  
41.            viewHolder.cardButton.setBackgroundResource(R.drawable.blankcard);  
42.            viewHolder.cardButton.setText(card.getContents());  
43.        } else {  
44.            viewHolder.cardButton.setBackgroundResource(R.drawable.stanfordtree);  
45.            viewHolder.cardButton.setText("");  
46.        }  
47.  
48.        viewHolder.cardButton.setOnClickListener(new View.OnClickListener() {  
49.            @Override  
50.            public void onClick(View v) {  
51.                if (monClickListener != null ) {  
52.                    v.setTag(i);  
53.                    monClickListener.onClick(v);  
54.                }  
55.            }  
56.        });  
57.    }  
58.  
59.    @Override  
60.    public int getItemCount() {  
61.        return game.count();  
62.    }  
63.  
64.    public class ViewHolder extends RecyclerView.ViewHolder {  
65.        Button cardButton;  
66.        public ViewHolder(@NonNull View itemView) {  
67.            super(itemView);  
68.            cardButton = (Button) itemView;  
69.        }  
70.    }  
71.}  
HistoryActivity .java
1.package com.example.recyclercardgame2;  
2.  
3.import android.content.Intent;  
4.import android.support.v7.app.AppCompatActivity;  
5.import android.os.Bundle;  
6.import android.widget.ArrayAdapter;  
7.import android.widget.ListView;  
8.  
9.import java.util.ArrayList;  
10.  
11.public class HistoryActivity extends AppCompatActivity {  
12.  
13.    @Override  
14.    protected void onCreate(Bundle savedInstanceState) {  
15.        super.onCreate(savedInstanceState);  
16.        setContentView(R.layout.activity_history);  
17.  
18.        Intent intent = getIntent();  
19.        ArrayList<String> playHistory = intent.getStringArrayListExtra("history");  
20.  
21.        ListView listView = findViewById(R.id.listView);  
22.  
23.        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,playHistory);  
24.        listView.setAdapter(adapter);  
25.  
26.    }  
27.  
28.    @Override  
29.    public void finish() {  
30.        super.finish();  
31.        overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);  
32.    }  
33.}  

CardGameAdapter.javaapp

1.package com.example.recyclercardgame2;  
2.  
3.import android.support.annotation.NonNull;  
4.import android.support.v7.widget.RecyclerView;  
5.import android.view.View;  
6.import android.view.ViewGroup;  
7.import android.widget.Button;  
8.  
9.import com.example.recyclercardgame2.model.Card;  
10.import com.example.recyclercardgame2.model.CardMatchingGame;  
11.  
12.public class CardGameAdapter extends RecyclerView.Adapter<CardGameAdapter.ViewHolder> {  
13.  
14.    private CardMatchingGame game;  
15.    private View.OnClickListener monClickListener;  
16.  
17.    public void setonClickListener(View.OnClickListener monClickListener) {  
18.        this.monClickListener = monClickListener;  
19.    }  
20.  
21.  
22.    public CardGameAdapter(CardMatchingGame game) {  
23.        this.game = game;  
24.    }  
25.  
26.    @NonNull  
27.    @Override  
28.    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {  
29.        View view = new Button(viewGroup.getContext());  
30.        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,360));  
31.        ViewHolder viewHolder = new ViewHolder(view);  
32.        return viewHolder;  
33.    }  
34.  
35.    @Override  
36.    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {  
37.        Card card = game.cardAtIndex(i);  
38.  
39.        viewHolder.cardButton.setAlpha(card.isMatched() ? (float)0.5: 1);  
40.        if(card.isChosen()){  
41.            viewHolder.cardButton.setBackgroundResource(R.drawable.blankcard);  
42.            viewHolder.cardButton.setText(card.getContents());  
43.        } else {  
44.            viewHolder.cardButton.setBackgroundResource(R.drawable.stanfordtree);  
45.            viewHolder.cardButton.setText("");  
46.        }  
47.  
48.        viewHolder.cardButton.setOnClickListener(new View.OnClickListener() {  
49.            @Override  
50.            public void onClick(View v) {  
51.                if (monClickListener != null ) {  
52.                    v.setTag(i);  
53.                    monClickListener.onClick(v);  
54.                }  
55.            }  
56.        });  
57.    }  
58.  
59.    @Override  
60.    public int getItemCount() {  
61.        return game.count();  
62.    }  
63.  
64.    public class ViewHolder extends RecyclerView.ViewHolder {  
65.        Button cardButton;  
66.        public ViewHolder(@NonNull View itemView) {  
67.            super(itemView);  
68.            cardButton = (Button) itemView;  
69.        }  
70.    }  
71.}  

Card.java文件dom

1.package com.example.recyclercardgame2.model;  
2.  
3.import java.io.Serializable;  
4.  
5./** 
6. * Created by lys on 19/3/20. 
7. */  
8.public abstract class Card implements Serializable {  
9.    private boolean _chosen;  
10.    private  boolean _matched;  
11.    public abstract String getContents();  
12.    public boolean isChosen(){  
13.        return _chosen;  
14.    }  
15.    public void setChosen(boolean chosen){  
16.        _chosen = chosen;  
17.    }  
18.    public boolean isMatched(){  
19.        return _matched;  
20.    }  
21.    public void setMatched(boolean matched){  
22.        _matched = matched;  
23.    }  
24.    public int match(Card[] otherCards){  
25.        int score = 0;  
26.        for (Card card : otherCards) {  
27.           if (card.getContents().equals(this)){  
28.               score = 1;  
29.           }  
30.        }  
31.        return score;  
32.    }  
33.}  

Deck.java文件ide

1.package com.example.recyclercardgame2.model;  
2.  
3.import java.util.ArrayList;  
4.import java.util.Random;  
5.  
6./** 
7. * Created by liguiyang on 16/3/7. 
8. */  
9.public class Deck {  
10.    private ArrayList<Card> _cards = new ArrayList<>();  
11.    private Random r = new Random();  
12.  
13.    public void addCard(Card card,boolean atTop){  
14.        if (atTop) {  
15.            _cards.add(0,card);  
16.        }else{  
17.            _cards.add(card);  
18.        }  
19.    }  
20.  
21.    public void addCard(Card card){  
22.        addCard(card,false);  
23.    }  
24.  
25.    public Card drawRandomCard(){  
26.        Card randomCard = null;  
27.        if (_cards.size()>0){  
28.            randomCard = _cards.remove(r.nextInt(_cards.size()));  
29.        }  
30.        return randomCard;  
31.    }  
32.}  

PlayingCard.java文件布局

1.package com.example.recyclercardgame2.model;  
2.  
3.import java.util.Arrays;  
4.  
5.public class PlayingCard extends Card{  
6.    private String _suit;  
7.    private int _rank;  
8.  
9.    public String getSuit(){  
10.        return _suit;  
11.    }  
12.    public void setSuit(String suit){  
13.        if(Arrays.asList(PlayingCard.validSuits()).contains(suit)){  
14.            _suit =  suit;  
15.        }  
16.    }  
17.    public int getRank(){  
18.        return _rank;  
19.    }  
20.    public void setRank(int rank){  
21.        if(rank <= PlayingCard.maxRank()) {  
22.            _rank = rank;  
23.        }  
24.    }  
25.    public static String[] validSuits(){  
26.        return new String[]{"♥","♦","♠","♣"};  
27.    }  
28.    private static String[] rankStrings(){  
29.        return new String[]{"?","A","2","3","4","5","6","7","8","9","10","J","Q","K"};  
30.    }  
31.
32.    public static int maxRank(){  
33.        return PlayingCard.rankStrings().length - 1;  
34.    }  
35.  
36.    @Override  
37.    public int match(Card[] otherCards) {  
38.        int score = 0;  
39.        if(otherCards.length == 1){  
40.            PlayingCard otherCard = (PlayingCard) otherCards[0];  
41.            if(otherCard.getRank()==this.getRank()){  
42.                score =  4;  
43.            }else if (otherCard.getSuit().equals(this.getSuit())){  
44.                score = 1;  
45.            }  
46.        }  
47.  
48.        return score;  
49.    }  
50.  
51.    @Override  
52.    public String getContents() {  
53.        return PlayingCard.rankStrings()[_rank] + _suit;  
54.    }  
55.}  

PlayingDeck.java文件ui

1.package com.example.recyclercardgame2.model;  
2.  
3.  
4.public class PlayingDeck extends Deck{  
5.    public PlayingDeck(){  
6.        super();  
7.        for (String suit :  
8.                PlayingCard.validSuits()) {  
9.            for (int rank = 1  ; rank <= PlayingCard.maxRank() ; rank++) {  
10.                PlayingCard card = new PlayingCard();  
11.                card.setRank(rank);  
12.                card.setSuit(suit);  
13.                addCard(card);  
14.            }  
15.        }  
16.    }  
17.}  

运行结果: this