突发奇想的想搞个游戏:点击中间的灯泡,其状态会由关闭改为打开,而且它的上下左右 四个灯泡执行同样的操作。再次点击,则其本身及上下左右四个按钮状态修改。 无论点击任何一个灯泡,其本身及上下左右四个灯泡皆改变状态。 (全部点亮即过关...)
为了确保游戏没那么难过关, 我仅仅设置了 8 行 6列,如上图所示:
1.首先当然是在视图上放置Button控件,为了方便将来更改它的难度,我设置了两个宏,分别代表它的行和列。同样还设置了一个宏代表每个Button之间的间隔
#define Row 8 #define Col 7 #define Space 50
2.其次开始规划视图,可以看出,这些控件显然是有规律放置的,所以在此告诫初学者,不要傻乎乎的创建48个Button对象。在这里,我们运用到双层for循环来创建Button,当然在此要精确计算每个Button的Frame值,排列整齐。尤其需要注意的是这里的tag值,这个值设置的很有讲究,在后面的方法中就能看出。
for (int i = 1; i <= Row; i++) { for (int j = 1; j <= Col; j++) { UIButton *Btn = [UIButton buttonWithType:UIButtonTypeCustom]; Btn.frame = CGRectMake(15 + (j - 1) * Space, 80 + (i - 1) * Space, 40, 40); [Btn setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];//正常状态下显示为关闭状态 [Btn setImage:[UIImage imageNamed:@"light"] forState:UIControlStateSelected];//被选中状态下为打开状态 Btn.tag = i * 100 + j; [Btn addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn]; }
3.这里需要声明一个方法来响应Button的触摸事件
- (void)clickAction:(UIButton *)sender { sender.selected = !sender.selected;//自身改变状态 UIButton *btn1 = (UIButton *)[self.view viewWithTag:sender.tag + 1];//自身右边Button的tag值 UIButton *btn2 = (UIButton *)[self.view viewWithTag:sender.tag - 1];//左边Button的tag值 UIButton *btn3 = (UIButton *)[self.view viewWithTag:sender.tag + 100];//下方Button的tag值 UIButton *btn4 = (UIButton *)[self.view viewWithTag:sender.tag - 100];//上方Button的tag值 btn1.selected = !btn1.selected; btn2.selected = !btn2.selected; btn3.selected = !btn3.selected; btn4.selected = !btn4.selected; //相应的Button改变其状态 }
这么看来,一个简单的小游戏已经做出来了,但是我好像没有玩它的欲望,因为我玩了半天,并不能使所有的灯全亮。一气之下,就把游戏删了,end.
时间: 2024-10-16 12:31:48