如果能给我一个新的Cocoa程序员,我将不胜感激

如果能给我一个新的Cocoa程序员,我将不胜感激,cocoa,objective-c-2.0,Cocoa,Objective C 2.0,我正在为设计游戏的女儿制作一个简单的程序。我只是想让Mac电脑计算出一个从1到6的随机数,将其与用户的猜测进行比较,然后得到差值,用于确定玩家可以在棋盘游戏中移动多少空格。一切正常,除了程序产生的差异总是3。它正确地生成了随机数,并且正确地读取了用户的输入。这是代码。我非常感谢你的帮助。我对这一点还不熟悉,并且意识到可能有一个非常简单的答案。我找了又找,没有找到解决办法。在某一点上,它产生的差异是正确的,但现在它不是。非常感谢 // // AstroGuessAppDelegate.h //

我正在为设计游戏的女儿制作一个简单的程序。我只是想让Mac电脑计算出一个从1到6的随机数,将其与用户的猜测进行比较,然后得到差值,用于确定玩家可以在棋盘游戏中移动多少空格。一切正常,除了程序产生的差异总是3。它正确地生成了随机数,并且正确地读取了用户的输入。这是代码。我非常感谢你的帮助。我对这一点还不熟悉,并且意识到可能有一个非常简单的答案。我找了又找,没有找到解决办法。在某一点上,它产生的差异是正确的,但现在它不是。非常感谢

//
//  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功能,但正在尝试世界上的一切来改变我的代码,看看我是否可以我会解决的。哈。“案例”这件事很有帮助。再说一次,我读过一些东西,但我在游戏开始的很早就没想到。非常感谢。我觉得它很傻。我甚至在我正在研究的书中读过关于大破坏的内容。我知道