Add readme.md
This commit is contained in:
185
readme.md
Normal file
185
readme.md
Normal file
@@ -0,0 +1,185 @@
|
||||
|
||||
# بازی سنگ، کاغذ، قیچی
|
||||
یک پروژه کلاس با کاتلین
|
||||
|
||||
---
|
||||
|
||||
## سناریوی کامل بازی
|
||||
|
||||
- کاربر وارد برنامه میشود.
|
||||
- یک پیام خوشآمد نشان داده میشود.
|
||||
- برنامه از کاربر میخواهد یکی از گزینهها ("سنگ"، "کاغذ"، "قیچی") را انتخاب کند.
|
||||
- اگر کاربر عبارت "تموم" را وارد کند، بازی تمام میشود و برنامه بسته میشود.
|
||||
- اگر کاربر اشتباهی وارد کند (مثلاً "آب"، "کفش") پیام خطا نمایش داده میشود و دوباره ورودی میخواهد.
|
||||
- برنامه به صورت تصادفی یکی از گزینهها را برای کامپیوتر انتخاب میکند.
|
||||
- برنامه نتیجه هر دور را نمایش میدهد ("مساوی شدین!" یا "هورا بردی!" یا "متاسفانه باختی").
|
||||
- سپس بازی برای دور بعدی آماده میشود.
|
||||
|
||||
---
|
||||
|
||||
## کد کامل برنامه
|
||||
|
||||
```kotlin
|
||||
fun main() {
|
||||
val options = listOf("سنگ", "کاغذ", "قیچی")
|
||||
|
||||
println("به بازی سنگ کاغذ قیچی خوش آمدید!")
|
||||
|
||||
while (true) {
|
||||
println("یک گزینه رو انتخاب کنید")
|
||||
val userSelection = readln()
|
||||
if (userSelection == "تموم") {
|
||||
break
|
||||
}
|
||||
if (userSelection !in options) {
|
||||
println("انتخابت اشتباهه")
|
||||
continue
|
||||
}
|
||||
val cpuSelection = options.random()
|
||||
if (cpuSelection == userSelection) {
|
||||
println("مساوی شدین!")
|
||||
} else if ((userSelection == "قیچی" && cpuSelection == "کاغذ")
|
||||
|| (userSelection == "سنگ" && cpuSelection == "قیچی")
|
||||
|| (userSelection == "کاغذ" && cpuSelection == "سنگ")
|
||||
) {
|
||||
println("هورا بردی!")
|
||||
} else {
|
||||
println("متاسفانه باختی")
|
||||
}
|
||||
println("-------------------------------------------")
|
||||
println()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## توضیح گام به گام کد و مفاهیم هر بخش
|
||||
|
||||
### ۱. تعریف لیست (Array/لیست)
|
||||
```kotlin
|
||||
val options = listOf("سنگ", "کاغذ", "قیچی")
|
||||
```
|
||||
- **لیست چیست؟**
|
||||
لیست یک نوع آرایه در کاتلین است، یعنی یک مجموعهٔ داده که چند مقدار رو کنار هم نگه میداره.
|
||||
هر مقدار (اینجا "سنگ"، "کاغذ"، "قیچی") در یک سلول قرار گرفته و هر بار میتوانیم با اسم لیست بهش دسترسی داشته باشیم.
|
||||
این کار باعث میشود دیگر نیاز نباشد برای هر گزینه یک متغیر جدا بسازیم.
|
||||
|
||||
---
|
||||
|
||||
### ۲. پیام خوشآمد به کاربر
|
||||
```kotlin
|
||||
println("به بازی سنگ کاغذ قیچی خوش آمدید!")
|
||||
```
|
||||
- `println()` یعنی چاپ یک جمله یا مقدار روی صفحه کنسول.
|
||||
|
||||
---
|
||||
|
||||
### ۳. حلقه بینهایت (Infinite Loop)
|
||||
```kotlin
|
||||
while (true) {
|
||||
...
|
||||
}
|
||||
```
|
||||
- **حلقه چیست؟**
|
||||
حلقه یا Loop، بخش مهمی از برنامهنویسی است که باعث میشود دستورات برنامه چند بار تکرار شوند.
|
||||
اینجا شرط حلقه `true` است، پس تا زمانی که داخلش با `break` قطع نشود، همیشه اجرا میشود.
|
||||
|
||||
---
|
||||
|
||||
### ۴. گرفتن ورودی از کاربر (`readln()`)
|
||||
```kotlin
|
||||
val userSelection = readln()
|
||||
```
|
||||
- این دستور، مقدار وارد شده توسط کاربر را از کنسول دریافت و داخل متغیر `userSelection` ذخیره میکند.
|
||||
|
||||
---
|
||||
|
||||
### ۵. شرط خروج از بازی (`if ... break`)
|
||||
```kotlin
|
||||
if (userSelection == "تموم") {
|
||||
break
|
||||
}
|
||||
```
|
||||
- اگر کاربر "تموم" را وارد کند، با دستور `break` از حلقه خارج میشود (یعنی بازی پایان میپذیرد).
|
||||
|
||||
---
|
||||
|
||||
### ۶. اعتبارسنجی ورودی کاربر
|
||||
```kotlin
|
||||
if (userSelection !in options) {
|
||||
println("انتخابت اشتباهه")
|
||||
continue
|
||||
}
|
||||
```
|
||||
- شرط `!in` بررسی میکند آیا ورودی کاربر جزو لیست `options` هست یا نه.
|
||||
- اگر اشتباه باشد پیام خطا چاپ میشود و با `continue`، این دور از حلقه رد میشود و برنامه دوباره از کاربر ورودی میخواهد.
|
||||
|
||||
---
|
||||
|
||||
### ۷. انتخاب تصادفی کامپیوتر (`.random()`)
|
||||
```kotlin
|
||||
val cpuSelection = options.random()
|
||||
```
|
||||
- با استفاده از تابع `.random()` یکی از اعضای لیست به صورت شانسی انتخاب میشود و در متغیر `cpuSelection` قرار میگیرد.
|
||||
|
||||
---
|
||||
|
||||
### ۸. منطق داوری بازی (`if...else`)
|
||||
```kotlin
|
||||
if (cpuSelection == userSelection) {
|
||||
println("مساوی شدین!")
|
||||
} else if ((userSelection == "قیچی" && cpuSelection == "کاغذ")
|
||||
|| (userSelection == "سنگ" && cpuSelection == "قیچی")
|
||||
|| (userSelection == "کاغذ" && cpuSelection == "سنگ")
|
||||
) {
|
||||
println("هورا بردی!")
|
||||
} else {
|
||||
println("متاسفانه باختی")
|
||||
}
|
||||
```
|
||||
- اگر انتخاب کاربر و کامپیوتر یکی باشد → مساوی.
|
||||
- اگر انتخاب کاربر برنده باشد → پیام برنده.
|
||||
- در غیر این صورت → پیام باخت.
|
||||
|
||||
---
|
||||
|
||||
### ۹. خط جداکننده برای دورهای بعدی
|
||||
```kotlin
|
||||
println("-------------------------------------------")
|
||||
println()
|
||||
```
|
||||
- فقط برای زیبایی خروجی و راحتتر شدن مشاهده نتیجه هر دور.
|
||||
|
||||
---
|
||||
|
||||
## تعریف مفاهیم اصلی به زبان ساده
|
||||
|
||||
- **لیست:**
|
||||
مجموعهای از دادهها مثل یک صندوقچه، که میتوانید هر نوع داده (متن، عدد و…) داخلش ذخیره کنید.
|
||||
|
||||
- **حلقه:**
|
||||
بخشی از برنامه که بارها تکرار میشود، تا زمانی که یک شرط برقرار است یا تا زمانی که متوقفش کنیم (مثلاً کاربر پایان بازی را اعلان کند).
|
||||
|
||||
- **شرط (if/else):**
|
||||
روشی برای کنترل مسیر اجرا؛ یعنی اگر یک حالت خاص اتفاق افتاد کاری انجام شود، و اگر حالت دیگر اتفاق افتاد، کار دیگری انجام شود.
|
||||
|
||||
- **دریافت داده از کاربر:**
|
||||
برای تعامل با کاربر، مقدار وارد شده توسط او را با `readln()` میگیریم و بررسی میکنیم.
|
||||
|
||||
---
|
||||
|
||||
## تمرین و چالش (برای دانشجوها)
|
||||
|
||||
1. اضافه کردن شمارنده امتیاز برای کاربر و کامپیوتر.
|
||||
2. به جای بازی بینهایت، بازی را بعد از رسیدن به ۳ برد یکی از طرفین تمام کنید.
|
||||
3. اگر کاربر اشتباه تایپ کرد (مثلاً "سنگ " با فاصله)، با دستور `.trim()` ورودی را اصلاح کنید و اعتبارسنجی انجام دهید.
|
||||
|
||||
---
|
||||
|
||||
## جمعبندی
|
||||
|
||||
این پروژه تمرینی باعث میشود:
|
||||
- مفاهیم **لیست**، **حلقه**، **شرط**، و **دریافت ورودی** را به صورت عملی بفهمید و تجربه کدنویسی داشته باشید.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user