如果能给我一个新的Cocoa程序员,我将不胜感激
我正在为设计游戏的女儿制作一个简单的程序。我只是想让Mac电脑计算出一个从1到6的随机数,将其与用户的猜测进行比较,然后得到差值,用于确定玩家可以在棋盘游戏中移动多少空格。一切正常,除了程序产生的差异总是3。它正确地生成了随机数,并且正确地读取了用户的输入。这是代码。我非常感谢你的帮助。我对这一点还不熟悉,并且意识到可能有一个非常简单的答案。我找了又找,没有找到解决办法。在某一点上,它产生的差异是正确的,但现在它不是。非常感谢如果能给我一个新的Cocoa程序员,我将不胜感激,cocoa,objective-c-2.0,Cocoa,Objective C 2.0,我正在为设计游戏的女儿制作一个简单的程序。我只是想让Mac电脑计算出一个从1到6的随机数,将其与用户的猜测进行比较,然后得到差值,用于确定玩家可以在棋盘游戏中移动多少空格。一切正常,除了程序产生的差异总是3。它正确地生成了随机数,并且正确地读取了用户的输入。这是代码。我非常感谢你的帮助。我对这一点还不熟悉,并且意识到可能有一个非常简单的答案。我找了又找,没有找到解决办法。在某一点上,它产生的差异是正确的,但现在它不是。非常感谢 // // AstroGuessAppDelegate.h //
//
// AstroGuessAppDelegate.h
//
// Created by Trent Evans on 3/7/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int macPick;
int numberGuess;
int numberDiff;
@interface AstroGuessAppDelegate : NSObject {
IBOutlet NSWindow *window;
IBOutlet id moveResultLabel;
IBOutlet id thinkingLabel;
IBOutlet NSComboBox *numberGuessBox;
}
- (IBAction)compareNumbersAndSendResults:(id)sender;
- (IBAction)macThinkOfNumber:(id)sender;
@end
//
// AstroGuessAppDelegate.m
//
// Created by Trent Evans on 3/7/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "AstroGuessAppDelegate.h"
@implementation AstroGuessAppDelegate
- (IBAction)macThinkOfNumber:(id)sender {
macPick = (arc4random() % 6) + 1;
NSString *thinkingLabelText = [NSString stringWithFormat: @"Ok. I'm thinking of a number."];
[thinkingLabel setStringValue:thinkingLabelText];
}
- (IBAction)compareNumbersAndSendResults:(id)sender {
numberGuess = [numberGuessBox intValue];
numberDiff = macPick - numberGuess;
if (numberDiff<0) {
numberDiff = numberDiff * -1;
}
NSString *moveResultLabelText;
if (numberDiff=0) {
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLAST OFF!\nMove forward 6 spaces", macPick, numberGuess, numberDiff];
}
if (numberDiff=1) {
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nORBIT!\nMove forward 4 spaces", macPick, numberGuess, numberDiff];
}
if (numberDiff=2) {
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nRE-ENTRY!\nMove forward 2 spaces", macPick, numberGuess, numberDiff];
}
if (numberDiff=3) {
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nSPLASHDOWN!\nMove forward 1 space", macPick, numberGuess, numberDiff];
}
else {
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLACK HOLE!\nSorry. You don't get to move.", macPick, numberGuess, numberDiff];
}
[moveResultLabel setStringValue:moveResultLabelText];
}
@end
//
//AstropAppDelegate.h
//
//特伦特·埃文斯于2011年3月7日创作。
//版权所有2011年uu MyCompanyName uuu。版权所有。
//
#进口
国际麦皮克;
整数;
int numberDiff;
@AppDelegate接口:NSObject{
ibnswindow*窗口;
ibid-moveResultLabel;
IBID thinkingLabel;
IB插座NSCOMBOX*编号UESSBOX;
}
-(iAction)ComparEnumbers和SendResults:(id)发件人;
-(iAction)macThinkOfNumber:(id)发送方;
@结束
//
//AstroguesAppDelegate.m
//
//特伦特·埃文斯于2011年3月7日创作。
//版权所有2011年uu MyCompanyName uuu。版权所有。
//
#导入“AstroGuessAppDelegate.h”
@AppDelegate的实现
-(iAction)macThinkOfNumber:(id)发送方{
macPick=(arc4random()%6)+1;
NSString*thinkingLabelText=[NSString stringWithFormat:@“好的,我在想一个数字。”];
[thinkingLabel设置字符串值:thinkingLabelText];
}
-(iAction)ComparEnumbers和SendResults:(id)发件人{
numberGuess=[numberGuessBox intValue];
numberDiff=macPick-numberGuess;
如果(numberDiffHeh,我花了一分钟才弄清楚到底发生了什么
简言之,两者之间存在差异:
if (numberDiff=1) {
及
第一个是赋值。它将取值1
,将其赋值到numberDiff
,并使用numberDiff
的新值作为if
语句的条件。由于1
是真值,这将成功
第二个是进行比较。它将取值1
,并将其与numberDiff
的值进行比较。如果两个值相等,则整个语句将生成一个真值
所以基本上,您需要使用=
,而不是=
您总是看到“3”案例的结果,因为这是最后一个if语句。程序能够将3
分配到numberDiff
,因此它将使用该案例中的文本更新NSTextField
。嘿,我花了一分钟才弄清楚发生了什么
简言之,两者之间存在差异:
if (numberDiff=1) {
及
第一个是赋值。它将取值1
,将其赋值到numberDiff
,并使用numberDiff
的新值作为if
语句的条件。由于1
是真值,这将成功
第二个是进行比较。它将取值1
,并将其与numberDiff
的值进行比较。如果两个值相等,则整个语句将生成一个真值
所以基本上,您需要使用=
,而不是=
你总能看到“3”的结果case,因为这是最后一个if语句。程序能够将3
赋值到numberDiff
,因此它将用该case中的文本更新NSTextField
。在if
语句中,赋值运算符=
而不是比较运算符=
,所以如果为真,则每个,最后执行的一个是3的
为此,您最好使用开关
:
switch(numberDiff)
{ case 0:
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLAST OFF!\nMove forward 6 spaces", macPick, numberGuess, numberDiff];
break;
case 1:
etc.
default:
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLACK HOLE!\nSorry. You don't get to move.", macPick, numberGuess, numberDiff];
}
接下来,在顶部将所有变量声明为文件全局变量:
int macPick;
int numberGuess;
int numberDiff;
如果这些在不同的方法之间共享,那么它们应该是实例变量,macPick
在这种情况下是一个实例变量。这应该在@界面中声明:
@interface AstroGuessAppDelegate : NSObject
{
int macPick;
etc.
看起来另外两个仅由ComparEnumbers和SendResults使用,因此在此处声明它们:
- (IBAction)compareNumbersAndSendResults:(id)sender
{
int numberGuess;
int numberDiff;
etc.
在一个小的音符变化:
numberDiff = numberDiff * -1;
到
甚至可以使用abs功能:
numberDiff = abs(macPick - numberGuess);
在if
语句中,赋值运算符=
而不是比较运算符=
,因此每个if
都是真的,最后一个执行的是3
的赋值运算符
为此,您最好使用开关
:
switch(numberDiff)
{ case 0:
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLAST OFF!\nMove forward 6 spaces", macPick, numberGuess, numberDiff];
break;
case 1:
etc.
default:
moveResultLabelText = [NSString stringWithFormat:@"My number was %i. Your number was %i. The difference is %i. \nBLACK HOLE!\nSorry. You don't get to move.", macPick, numberGuess, numberDiff];
}
接下来,在顶部将所有变量声明为文件全局变量:
int macPick;
int numberGuess;
int numberDiff;
如果这些在不同的方法之间共享,那么它们应该是实例变量,macPick
在这种情况下是一个实例变量。这应该在@界面中声明:
@interface AstroGuessAppDelegate : NSObject
{
int macPick;
etc.
看起来另外两个仅由ComparEnumbers和SendResults使用,因此在此处声明它们:
- (IBAction)compareNumbersAndSendResults:(id)sender
{
int numberGuess;
int numberDiff;
etc.
在一个小的音符变化:
numberDiff = numberDiff * -1;
到
甚至可以使用abs功能:
numberDiff = abs(macPick - numberGuess);
非常感谢你。我觉得这很愚蠢。我甚至在我正在读的书中读到过关于“='vs'==”可能造成的大破坏的内容。我知道这是一件愚蠢的事情,也是非常基本的事情,我真的很感谢你花时间帮助一个新手。我本来有abs功能,但正在尝试世界上的一切来改变我的代码,看看我是否可以我会解决的。哈。“案例”这件事很有帮助。再说一次,我读过一些东西,但我在游戏开始的很早就没想到。非常感谢。我觉得它很傻。我甚至在我正在研究的书中读过关于大破坏的内容。我知道