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


    布局文件:

    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文件

    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.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.}  
    

    Card.java文件

    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文件

    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文件

    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.}  
    

    运行结果:


  • 相关阅读:
    rust 实战 实现一个线程工作池 ThreadPool
    rust Cell 与 RefCell的区别
    使用pre标签显示原始文本并自动换行
    rust实战 newtype模式
    什么是幻读,怎么解决幻读
    rust match 模式匹配摘录
    Elasticsearch 8的版本来了;可以直接在 Elasticsearch 中使用 PyTorch Machine Learning 模型
    神奇的库 phone
    python中单例的实现
    斐波那契查找
  • 原文地址:https://www.cnblogs.com/lyszyl/p/10805187.html
Copyright © 2020-2023  润新知