当前位置:   article > 正文

使用TypeScript面向对象方法实现扑克牌小游戏_掼蛋typescript

掼蛋typescript

两个人比较大小的小游戏

  1. // 扑克牌小游戏
  2. enum SUIT {'黑桃','红桃','梅花','方块','王'}
  3. enum RANK {R2,R3,R4,R5,R6,R7,R8,R9,R10,RJ,RQ,RK,RA,R小,R大}
  4. // 声明一个类型, 描述一张扑克牌的信息
  5. class Card{
  6. suit:SUIT;
  7. rank:RANK;
  8. constructor(suit:SUIT, rank:RANK){
  9. this.suit =suit;
  10. this.rank =rank;
  11. }
  12. toString(){
  13. return SUIT[this.suit] + RANK[this.rank];
  14. }
  15. }
  16. // 声明一个类型, 描述一张扑克牌的信息
  17. let c1 = new Card(SUIT.黑桃, RANK.RA) //创建一张黑桃A
  18. console.log(c1.toString())
  19. let c2 = new Card(SUIT.王, RANK.R大) //大王
  20. console.log(c2.toString())
  21. // 通过循环, 创建52张牌
  22. let cards: Card[] =[]
  23. for(let suit = SUIT.黑桃; suit <= SUIT.方块; suit++){
  24. for(let rank = RANK.R2; rank<=RANK.RA; rank++){
  25. cards.push(new Card(suit, rank))
  26. }
  27. }
  28. cards.push(new Card(SUIT.王, RANK.R小))
  29. cards.push(new Card(SUIT.王, RANK.R大))
  30. console.log('牌:',cards.toString())
  31. // 将54张牌分配给2个玩家, 设计一个玩家类, 继续后续的游戏流程
  32. class Player{
  33. name:string;
  34. score:number;
  35. handCards: Card[];
  36. constructor(name:string){ // 构造函数用于 属性数据初始化
  37. this.name = name;
  38. this.score = 0;
  39. this.handCards = []
  40. }
  41. /**
  42. * 当前玩家从牌堆中随机抽一张牌. 最终牌堆会少一张, 玩家手牌会多一张
  43. * @param cards 牌堆 Card[]
  44. */
  45. choupai(cards:Card[]):void {
  46. let randomIndex = Math.floor(Math.random()*cards.length)
  47. let deletedCard = cards.splice(randomIndex, 1)[0]
  48. this.handCards.push(deletedCard)
  49. }
  50. // 返回一个字符串, 描述当前玩家对象的信息
  51. toString(){
  52. return `
  53. 姓名:${this.name},
  54. 得分:${this.score},
  55. 手牌:${this.handCards.toString()}
  56. `
  57. }
  58. /**
  59. * 与另外一个玩家: other 比较手中所有牌的大小, 且计分
  60. * @param other 另外一个玩家对象
  61. */
  62. pk(other:Player){
  63. for(let i = 0; i<this.handCards.length; i++){
  64. let myCard = this.handCards[i] //我的牌
  65. let otherCard = other.handCards[i] //对手的牌
  66. if(myCard.rank>otherCard.rank){
  67. this.score++ //我得分
  68. }else if(myCard.rank<otherCard.rank){
  69. other.score++ //对手得分
  70. }
  71. }
  72. }
  73. }
  74. let ming = new Player('小明')
  75. let hong = new Player('小红')
  76. // 不断抽牌, 抽到没牌为止
  77. while(cards.length != 0){
  78. ming.choupai(cards)
  79. hong.choupai(cards)
  80. }
  81. // 不断的按顺序比较俩人手牌大小, 大的得1分
  82. ming.pk(hong)
  83. console.log(ming.toString())
  84. console.log(hong.toString())

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号