第一、二课源代码

 1 //
 2 //  Card.h
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/18.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import <Foundation/Foundation.h>
10
11 @interface Card : NSObject
12
13 @property (strong, nonatomic) NSString *contents;
14 @property (nonatomic, getter=isChoosen) BOOL choosen;
15 @property (nonatomic, getter=isMatched) BOOL matched;
16
17 - (int)match:(NSArray *)otherCards;
18 @end

Card.h

 1 //
 2 //  Card.m
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/18.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "Card.h"
10
11 @implementation Card
12
13 - (int)match:(NSArray *)otherCards
14 {
15     int score = 0;
16
17     for (Card *card in otherCards){
18         if ([card.contents isEqualToString:self.contents]) {
19             score = score + 1;
20         }
21
22     }
23
24     return score;
25 }
26
27 @end

Card.m

 1 //
 2 //  Deck.h
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/18.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import <Foundation/Foundation.h>
10 #import "Card.h"
11
12 @interface Deck : NSObject
13
14 - (void)addCard:(Card *)card;
15
16 - (void)addCard:(Card *)card atTop:(BOOL)atTop;
17
18 - (Card *)drawRandomCard;
19
20 @end

Deck.h

 1 //
 2 //  Deck.m
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/18.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "Deck.h"
10
11 @interface Deck()
12
13 @property (strong, nonatomic) NSMutableArray *cards;
14
15 @end
16
17 @implementation Deck
18
19 - (NSMutableArray *)cards
20 {
21     if (!_cards) _cards = [[NSMutableArray alloc] init];
22
23     return _cards;
24 }
25
26 - (void)addCard:(Card *)card
27 {
28     [self addCard:card atTop:NO];
29 }
30
31 - (void)addCard:(Card *)card atTop:(BOOL)atTop
32 {
33     if (atTop) {
34         [self.cards insertObject:card atIndex:0];
35     } else {
36         [self.cards addObject:card];
37     }
38 }
39
40 - (Card *)drawRandomCard
41 {
42     Card *randomCard = nil;
43
44     if ([self.cards count]) {
45         unsigned index = arc4random() % [self.cards count];
46         randomCard = self.cards[index];
47         [self.cards removeObjectAtIndex:index];
48     }
49
50     return randomCard;
51 }
52
53 @end

Deck.m

 1 //
 2 //  PlayingCard.h
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/19.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "Card.h"
10
11 @interface PlayingCard : Card
12
13 @property (nonatomic, strong) NSString *suit;
14 @property (nonatomic) NSUInteger rank;
15
16 + (NSArray *)validSuits; // public class methord
17 + (NSUInteger)maxRank;
18 @end

PlayingCard

 1 //
 2 //  PlayingCard.m
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/19.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "PlayingCard.h"
10
11
12 @implementation PlayingCard
13 - (NSString *) contents{
14     NSArray *rankStrings = [PlayingCard rankStrings];
15     return [rankStrings[self.rank] stringByAppendingString:self.suit];
16 }
17
18 + (NSArray *)rankStrings // private class methord
19 {
20     return @[@"?", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"J", @"Q", @"K"];
21 }
22
23 @synthesize suit = _suit;
24 + (NSArray *)validSuits
25 {
26     return @[@"♦?", @"♠?", @"♥?", @"♣?"];
27 }
28
29 - (void)setSuit:(NSString *)suit
30 {
31     if ([[PlayingCard validSuits] containsObject:suit]) {
32         _suit = suit;
33     }
34 }
35
36 - (NSString *)suit
37 {
38     return _suit ? _suit : @"?";
39 }
40
41 + (NSUInteger)maxRank
42 {
43     return [[PlayingCard rankStrings] count] - 1;
44 }
45
46 -(void)setRank:(NSUInteger)rank
47 {
48     if (rank <= [PlayingCard maxRank]) {
49         _rank = rank;
50     }
51 }
52
53 @end

PlayingCard.m

 1 //
 2 //  PlayingCardDeck.h
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/19.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "Deck.h"
10
11 @interface PlayingCardDeck : Deck
12
13 @end

PlayingCardDeck.h

 1 //
 2 //  PlayingCardDeck.m
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/19.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "PlayingCardDeck.h"
10 #import "PlayingCard.h"
11
12 @implementation PlayingCardDeck
13 - (instancetype) init
14 {
15     if (self = [super init]) {
16         for (NSString *suit in [PlayingCard validSuits]) {
17             for (NSUInteger rank = 1; rank <= [PlayingCard maxRank]; rank++) {
18                 PlayingCard *card = [[PlayingCard alloc ] init];
19                 card.suit = suit;
20                 card.rank = rank;
21                 [self addCard:card];
22             }
23         }
24     }
25
26     return self;
27 }
28 @end

PlayingCardDeck.m

 1 //
 2 //  ViewController.m
 3 //  Machismo
 4 //
 5 //  Created by qiuda bin on 15/11/12.
 6 //  Copyright © 2015年 qiuda bin. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10 #import "PlayingCardDeck.h"
11
12 @interface ViewController ()
13
14 @property (weak, nonatomic) IBOutlet UILabel *flipLabel;
15 @property (nonatomic) int flipCount;
16 @property (nonatomic, strong) Deck *deck;
17
18 @end
19
20 @implementation ViewController
21
22 -(Deck *)deck
23 {
24     if (!_deck) {
25         _deck = [self createDeck];
26     }
27
28     return _deck;
29 }
30
31 -(Deck *)createDeck
32 {
33     return [[PlayingCardDeck alloc] init];
34 }
35
36 - (void)setFlipCount:(int)flipCount
37 {
38     _flipCount = flipCount;
39     self.flipLabel.text = [NSString stringWithFormat:@"Flips: %d", self.flipCount];
40 }
41
42
43 - (IBAction)touchCardButton:(UIButton *)sender {
44
45     if ([sender.currentTitle length]) {
46         [sender setBackgroundImage:[UIImage imageNamed:@"cardBackground"]
47                           forState:UIControlStateNormal];
48         [sender setTitle:@"" forState:UIControlStateNormal];
49
50         self.flipCount++;
51
52     } else {
53         Card * card = [self.deck drawRandomCard];
54         if (card) {
55             [sender setBackgroundImage:[UIImage imageNamed:@"cardFront"]
56                               forState:UIControlStateNormal];
57             [sender setTitle:card.contents forState:UIControlStateNormal];
58
59             self.flipCount++;
60         }
61     }
62
63 }
64
65 @end

ViewController.m

时间: 2024-10-24 23:26:03

第一、二课源代码的相关文章

【C++探索之旅】第一部分第十二课:指针一出,谁与争锋

内容简介 1.第一部分第十二课:指针一出,谁与争锋 2.第一部分第十三课预告:第一部分小测验 指针一出,谁与争锋 上一课<[C++探索之旅]第一部分第十一课:小练习,猜单词>中,我们用一个小游戏来总结了之前几课学习的知识点. 现在,终于来到第一部分的最后一个知识点了,也是C++的基础部分的最后一个讲题.之后进入第二部分,就会开始面向对象之旅.因此,这一课也注定不平凡.系好安全带吧,因为马力要加足了! 指针这个C系语言的难点(著名的C语言里也有指针),令无数英雄"尽折腰",也

NeHe OpenGL教程 第四十二课:多重视口

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十二课:多重视口 多重视口 画中画效果,很酷吧.使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 欢迎来到充满趣味的另一课.这次我将向你展示怎样在单个窗口内显示多个视口.这些视口在窗口模式下能正确的调整大小.其中有

NeHe OpenGL教程 第二十二课:凹凸映射

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十二课:凹凸映射 凹凸映射,多重纹理扩展: 这是一课高级教程,请确信你对基本知识已经非常了解了.这一课是基于第六课的代码的,它将建立一个非常酷的立体纹理效果. 这一课由Jens Schneider所写,它基本上是由第6课改写而来

NeHe OpenGL教程 第十二课:显示列表

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十二课:显示列表 显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表,显示列表将

Kali Linux Web 渗透测试— 第十二课-websploit

Kali Linux Web 渗透测试— 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试— 第十二课-websploit............................................... 1 Websploit 简介........................................................................................... 2 主要功能...........

第三十二课 二维数组及其定义 【项目1-2】

第三十二课  二维数组及其定义 项目一 [折腾二维数组] 创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值: 按行序优先输出数组元素: 将所有元素值乘以3后保存在数组中: 按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"): 将数组"倒"着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出): 输出数组中的所有偶数: 输出所有行列下标之和为3的倍数的元素值

第一节课作业

1 C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,Unix,Linux,Mac,os/2,无一例外,哪一个不是C语言写的?很多新型的语言如,C++,Java,C#,J#,perl...都是衍生自C语言.掌握了C语言,可以说你就掌握了很多门语言. 学习C程序这门课一年了,这是我们学的第一门专业课,在大学里C语言不

C#第一节课作业,HelloWorld

通过第一节课的学习,我们掌握了一些C#的基本知识.无论是C#的名字的由来还是有关Hello World和Console都让我受益匪浅. 回到家后,我首先实验了一下最简单的Hello World▼ 成功了√ 然后,我实验了一下省去System的写法▼ 成功了√ 这之后我又试了一下同文件中的调用▼ 成功了√ 之后是调节字和背景的颜色▼ 成功了√ 之后我尝试了不同文件的调用▼ 成功了√ 然后我试了下分步执行▼ 成功了√ 然后我设置了变量▼ 成功了√ 最后我试验了一下ResetColor的用法▼ 成功了

Centos安装自定义布局才能自己划分各个区的大小 CentOS远程连接 第一节课

Centos安装自定义布局才能自己划分各个区的大小 CentOS远程连接 第一节课 swap最好不要超过8G 内存小于8G,swap设置内存的两倍 一般只分三个区 f f f boot:200MB SWAP:swap设置内存的两倍 根分区:20G /data:剩余所有空间,如果服务器跑的是数据库 ---------------------------------------------- 如果不跑数据库,这样分 boot:200MB SWAP:swap设置内存的两倍 根分区:剩余所有空间 f 腾