עבור לתוכן

C#| שימוש בתכונות של עצמים

Featured Replies

פורסם

בנסיום לבנות בלק ג'ק פשוט, רציתי לבנות מחלקה לקלף, ככה שתכיל את התכונות סוג ומספר.

ומהתוכנה הראשית רציתי ליצור מערך מסוג הקלף שיצרתי לו מחלקה בהתחלה. עכשיו אני מנסה להכניס את כל הקלפים למערך ע"י הכתיבה הזאת-



cards[0]=new card(2,heart);


אם אני עושה את heart בלי מרכאות זה אומר לי שזה לא מוכר בקונטקסט הזה.

אם אני עושה עם הוא אומר ש-CARD (העצם שיצרתי) לא מקבל שני ארגומנטים.

על מנת לעזור בפיתורן, זה הפעולה ליצירת עצמים שעשיתי-




class card
{

private char num;
private string shape;

public void card (char num, string shape)
{

this.num = num;
this.shape = shape;

}

פורסם

2 הוא מספר, לא char. אם אתה רוצה אותו בתור char, אתה צריך לעשות '2'.

חוץ מזה, למה שהוא יכיר את heart אם נתת אותו בלי מרכאות? ככה הוא מחפש משתנה שנקרא heart.

(ובלי להעליב, אם יש לך טעויות כאלה, מומלץ שתחזור על חומר למתחילים לפני שאתה עובד עם מחלקות)

פורסם




class card
{

private char num;
private string shape;

public card (int num, string shape)
{

this.num = num;
this.shape = shape;

}

מלבד הטעויות ששניצל ציין.

בגדול, הקומפיילר שלך צודק, הוא מנסה ליצור אובייקט חדש עם ה-Default Constructor (שלא מקבל ארגומנטים כידוע) ולא מצליח כי העברת לו שני ארגומנטים.

למה הוא לא משתמש בזה שהגדרת? כי זה לא Constructor, תעיף את ה-VOID והכל יסתדר :)

פורסם
  • מחבר

תודה על התגובות!

.ה- char היה בשביל להגדיר גם מלך ומלכה- 'Q', 'K'.. זה ששכחתי לשים את הגרשיים האלה זאת טעות שלי.

למה אני אמור להוריד את ה-VOID.. לא הבנתי את זה.

בכל מקרה תודה, זה הצליח.

שאלה נוספץ- מה אני צריך לרשום בהצגה של פעולה (יענו עם ההתחלה של PUBLIC) שמחזירה מחסנית מסוג CARD שיצרתי ומקבלת מערך של CARD?

פורסם

קרא שוב את מה ש-captaincaveman אמר.

(אפילו לא שמתי לב לזה בעצמי)

פורסם

זה משהו טכני לחלוטין, ל-CONSTRUCTOR לא מציינים RETURN TYPE, אפילו לא VOID.

פורסם
  • מחבר

אחלה, תודה.

איזה טיפוס אתם מכירים שאפשר להשתמש בו כדי לקלוט מצד אחד מספרים 2-10 ואת האותיות J-A (לכל המספרים והסמלים של נסיך, מלכה וכאלה)?

פורסם

אם אתה רוצה טיפוס שיוכל להחזיק אך ורק ערכים כאלה, אז תצטרך להגדיר Enum. כמובן, הערכים שלו חייבים להיות מזהים תקניים, כלומר הוא לא יוכל להכיל את הערך 2, אבל כן יוכל להכיל, לדוגמה, את הערך Two.

הדבר הנכון הוא פשוט לעבוד עם מזהה מספרי (1 עד 13) או char.

פורסם
  • מחבר

אחלה.

שאלה אחרונה ומצטער על ההטרדה.

אני רוצה לפנות לתכונה מוסימת של עצם, אם להיות ספציפי עשיתי את המחלקה CARD ויש שם את התכונה NUM. אני רוצה להגיע אל המספר הזה מתוכנית ה-MAIN.

אני יודע שאי אפשר לגשת לתכונות, אלא דרך פעולות. אז עשיתי פעולה בתוך מחלקת ה-CARD


public int number()
{
return num;
}

אלא, שזה לא עזר וכשניסיתי לפנות למספר הזה דרך כתיבת- Console.WriteLine(temp.number);

קיבלתי שגיאה שאי אפשר להשוות את זה ל-INT, אבל זה אמו רלהיות INT.

איפה הטעות שלי?

פורסם

ש-tmp.number היא פונקציה, ולכן צריך לקרוא לה עם סוגריים () על מנת לקבל את ערך ההחזרה.

על מנת שהקוד יעבוד איך שרצית, אתה צריך ש-number יהיה property.

פורסם


public int number
{
get
{
return num;
}
set // if you want a setter as well
{
num = value;
}
}

^^^

property

פורסם
  • מחבר

תיקנתי הכל לפי מה שאמרתם ועכשיו אין יותר ארורים. אך כשאני מריץ את התוכנה היא נעצרת אחרי הדפסת השורה הראשונה.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace black_jack
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to Black JAck game!!");
card[] cards = new card[52];
cards = hachnasa(cards);
Stack<card> hafisa = new Stack<card>();

hafisa = create(cards, hafisa);
Console.WriteLine("yor first card is:");
int count = 0;
char stop = 'n';

card temp;

while (count <= 21 || stop == 'n')
{
temp = hafisa.Pop();
Console.WriteLine(temp.number() + " " + temp.shape1());
Console.WriteLine("enter Y if you would like to stpo or N if you would like to continue");
stop = char.Parse(Console.ReadLine());


}

if (count > 21)
Console.WriteLine("you lost!");
else
if (count == 21)
{
Console.WriteLine("you won!!");
}
else
Console.WriteLine("you can do better than that!");




}



public static Stack<card> create(card[] cards, Stack<card> hafisa)
{

Random rnd = new Random();
int num1 = rnd.Next(0, 52);
for (int i = 0; i < 52; i++)
{
while (cards[num1].number() != 0)
{
num1 = rnd.Next(0, 52);

}
hafisa.Push(cards[i]);
cards[num1].idcon(cards[num1]);
num1 = rnd.Next(0, 52);

}
return hafisa;

}

public static card[] hachnasa(card[] cards)
{

cards[0] = new card(2, "heart");
cards[1] = new card(2, "diamond");
cards[2] = new card(2, "spade");
cards[3] = new card(2, "clover");
cards[4] = new card(2, "heart");
cards[5] = new card(3, "diamond");
cards[6] = new card(3, "spade");
cards[7] = new card(3, "clover");
cards[8] = new card(4, "heart");
cards[9] = new card(4, "diamond");
cards[10] = new card(4, "spade");
cards[11] = new card(4, "clover");
cards[12] = new card(5, "heart");
cards[13] = new card(5, "diamond");
cards[14] = new card(5, "spade");
cards[15] = new card(5, "clover");
cards[16] = new card(6, "heart");
cards[17] = new card(6, "diamond");
cards[18] = new card(6, "spade");
cards[19] = new card(6, "clover");
cards[20] = new card(7, "heart");
cards[21] = new card(7, "diamond");
cards[22] = new card(7, "spade");
cards[23] = new card(7, "clover");
cards[24] = new card(8, "heart");
cards[25] = new card(8, "diamond");
cards[26] = new card(8, "spade");
cards[27] = new card(8, "clover");
cards[28] = new card(9, "heart");
cards[29] = new card(9, "diamond");
cards[30] = new card(9, "spade");
cards[31] = new card(9, "clover");
cards[32] = new card(10, "heart");
cards[33] = new card(10, "diamond");
cards[34] = new card(10, "spade");
cards[35] = new card(10, "clover");
cards[36] = new card(11, "heart");
cards[37] = new card(11, "diamond");
cards[38] = new card(11, "spade");
cards[39] = new card(11, "clover");
cards[40] = new card(12, "heart");
cards[41] = new card(12, "diamond");
cards[42] = new card(12, "spade");
cards[43] = new card(12, "clover");
cards[44] = new card(13, "heart");
cards[45] = new card(13, "diamond");
cards[46] = new card(13, "spade");
cards[47] = new card(13, "clover");
cards[48] = new card(14, "heart");
cards[49] = new card(14, "diamond");
cards[50] = new card(14, "spade");
cards[51] = new card(14, "clover");



return cards;
}


}






class card
{

int num;
string shape;

public card(int num, string shape)
{

this.num = num;
this.shape = shape;

}

public int number()
{
return num;
}

public string shape1()
{
return shape;
}



public void idcon(card yosi)
{
this.num = 0;
}

}
}


אשמח אם תוכלו להעיף מבט מבלי להתייחס יותר מידי לאיך שבניתי תמשחק עצמו..

פורסם

while (cards[num1].number() != 0)

תחשוב מה הבעיה כאן.

יש לך עוד באגים, אבל נטפל בהם אחר כך.

נ.ב. להבא, מומלץ שתסביר למה אתה מתכוון ב"נעצרת" (התכנית נתקעת, או שהיא נעצרת ויוצאת?)

פורסם
  • מחבר

אחלה, סידרתי את הבעיה הזו. כשאמרתי נעצרת התכוונתי שהיא מראה לי תשורה הראשונה- ברוכים הבאים... ולא ממשיכה, כלומר הסמן מהבהב על הרקע השחור- עדיין פועלת אבל לא ממשיכה. סליחה על החוסר פירוט ממקודם.

עכשיו כשהתוכנית רצה יש בעיה שתמיד הקלף שנשלף הערך שלו הוא 0, כאילו הוא נלקח מהמערך שאיפסתי את כולו, אבל למעשה העברתי את כל הקלפים למחסנית ומשם שלפתי.

תודה מראש

פורסם

הבעיה היא שלא העברת את הקלפים למחסנית, אלא רק שמרת התייחסות אליהם שם. הדבר הנכון הוא לאפס את הקלפים במערך ע"י השמת null, ולא ע"י שינוי הערך שלהם ל-0.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים