Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
180
Перегляди статей
621976
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Посібник по C#  

 Вивчаємо сучасну мову  програмування C# 7.0

ПРОГРАМУЄМО в VISUAL STUDIO 2017

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 1000 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Відеокурс по С++  

   

Рекомендуємо:  

   

Сайти  

Українські уроки про ІТ

Єдина Країна! Единая Страна!

 

Українські уроки про програмування

 

 
   

Вступ

На уроці про цикли я казав, що оператор циклу ‘for’ ми залишимо на пізніше. Так, от пізніше – настало! 

Цикл “for”

Якщо зовсім просто, то цикл “for” виконує певний набір дій для кожного значення у списку. Давайте одразу перейдемо до простого прикладу із списком.

 

 

1

2

3

4

5

6

7

8

9

# приклад 'for' циклу

# спочатку створимо список, по якому пізніше будемо пробігатись

myList = [10, 'test string', 1234, "Longer Sentence String.", -21]

 

# створюємо цикл і пробігаємось по списку myList призначаючи тимчасовій змінній

# 'value' поточний елемент списку, тобто при першому колі змінна value матиме

# значення 10, а при останньому -21

for value in myList:

    print value

Як ви бачите, коли цикл виконується, він пробігає по усіх значеннях у списку, що йде одразу за ключовим словом ‘in’. Тоді він призначає значення із списку змінній value, запускає своє тіло (тіло циклу), кожен раз маючи змінну value встановлену у поточне значення із списку. Давайте розглянемо ще один приклад з використанням циклу ‘for’ для закріплення:

 

1

2

3

4

5

6

7

8

name = raw_input("What is your name?")

 

print "Hello"

 

for letter in name:

    print letter

 

print "!"

Спробуйте перенабрати дану маленьку програму у своєму редакторі і тоді запустити. Вже зрозуміли, що саме вона виконує? І взагалі, працює? … Програма питає ваше ім’я, а тоді друкує кожну літеру вашого імені в окремому рядочку. Що слід тут зауважити:

·         як ми з вами бачимо, стрічки (пам’ятаємо: стрічка – це рядочок тексту) у Python є фактично списком символів. Тобто по ній можна пробігатися як по звичайному списку використовуючи цикл ‘for’.

·         пригадуємо функцію ‘raw_input’ – це вбудована пітонівська функція, яка дозволяє нам приймати ввід від користувача.

Ніби все. Досить все просто з циклом ‘for’. Погодьтеся Опис : :)

Створення Функції Меню

А тепер давайте троги попишемо програми. На даний момент ми з вами вивчили, що таке змінні, списки, цикли та функції. Цього абсолютно достатньо для нас, щоб трохи погрограмувати! То ж давайте призначимо тепер собі завдання. Завданням буде ГРА! Яка саме – поясню далі у наступній секції. А поки, для гри необхідна функція друкування меню. Тому почнемо саме з неї. Ось код функції з детальними поясненнями і коментарями.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

# Функція Меню

# Функція виводитиме користувачу меню доступних опцій і

# проситиме його зробити свій вибір. Після того як користувач

# зробив вибір - функція повертатиме назовні вибір користувача.

 

# визначаємо функцію під назвою 'menu', функція наша приймає 2 аргументи

# list - це буде список опцій

# question - це стрічка, питання до користувача, щоб він зробив вибір

def menu(list, question):

    # пробігаємось по усіх опціях у списку і роздруковуємо їх користувачу

    # на екран для подальшого вибору

    for entry in list:

        # будь-який пітонівський список має метод index,

        # цей метод приймає елемент списку як аргумент і повертає

        # індекс даного елементу у списку

        # Таким чином у рядочку нижче ми виводимо на екран поточний

        # елементу entry у списку list, збільшуємо його на одиничку, щоб

        # для користувача список починався з 1, а не з нуля (адже

        # пам'ятаємо в пітоні індекси елементи у списку починаються з 0)

        print 1 + list.index(entry),

        # закриваємо номер опції дужкою, ну і звичайно не забуваємо

        # вивести після дужки саму назву опції

        print ") " + entry

 

    # після того як вивели усі доступні опції, час і запитати користувача

    # зробити свій вибір - вивівши на екран питання.

    # Зауважте, ми віднімаємо одиничку від отриманого від користувача

    # вибору, щоб отримати справжню позицію елемента зі списку (пам'ятаємо

    # у рядочках вище ми спеціально цю одиничку додавали при виводі опцій)

    return input(question) - 1

Саме призначення функції може на даний момент бути не до кінця зрозумілим, адже ми ще не дійшли до моменту її використання у нашій грі. Але це ми з’ясуємо пізніше. На даний момент головне, щоб ми з вами розібралися у самій суті даної функції. Я спеціально додав багато коментарів, буквально на кожну стрічку коду. Коментарів, як бачите, значно більше за сам код. В більшості випадків мати коментарі у вашому коді (звичайно не так багато як у прикладі вище, а лише у потрібних місцях, які важко зрозуміти без підказок) є дуже хорошою ідеєю. Особливо, якщо ви плануєте публікувати свій код, щоб інші могли ним користуватися та дописувати у нього, коментарі ніколи не будуть зайвими.

Наша перша “Гра”

Зараз ми з вами напишемо просту текстову приходницьку гру. Звучить цікаво? Гра відбуватиметь лише в одній кімнаті будинку, і в цій кімнаті, окрім дверей, будуть ще 5 предментів. В одному із цих 5-ти предметів будуть знаходитись ключі. Задача гравця знайти ключ і вийти через двері з кімнати. Давайте для початку розберемо хід гри на людській мові. Це ще називається псевдокодом. З його допомогою ми спробуємо окреслити загальний хід (алгоритм) гри.

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

Даємо комп'ютеру знати про нашу функцію меню (яку ми напередодні

з вами описали)

 

Роздруковуємо на екран для користувача привітальне повідомлення,

також описуємо кімнату.

Також повідомляємо користувача про п'ять речей у кімнаті: вазонок, картина, ваза,

туфля, абажур. Ну і не забуваємо сказати про двері ;)

 

Говоримо комп'ютеру, що двері закриті.

Говоримо комп'ютеру де знаходяться ключі.

 

Виводимо користувачу меню вказуючи на речі, які він може обирати:

    Даємо набір із 6-ти опцій (5 предметів + двері)

    Задаємо питання: "На що ви поглянете тепер?"

 

Якщо користувач хотів поглянути на:

    вазонок:

        Якщо ключ є тут, тоді даємо гравцю ключ

        Інакше, кажемо, що немає ключа, знову виводимо меню

    картина:

        такі самі дії як і у випадку з вазонком

    і т.д. по решті 3х предментів у кімнаті

    двері:

        Якщо гравець має ключ, тоді дозволяємо йому їх відкрити

        Інакше, кажемо йому, щоб шукав краще

 

Ну і наприкінці, даємо гравцю невеличку похвалу за вдало закінчену гру :)

Тобто, як бачите, суть гри – найти ключ і відкрити ним двері. Щоб знайти ключ – треба по черзі заглядати під різні предмети. Чим швидше – тим краще. А тепер давайте це все перепишемо на мову… звісно, Python Опис : :)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

# -*- coding: utf-8 -*-

 

# ГРА ПРИГОДИ В КІМНАТІ (майже як у фільми пила, тільки без жахів ;)

 

# наша старенька функція меню, далі побачимо як ми її застосовуватимемо

def menu(list, question):

    for entry in list:

        print 1 + list.index(entry),

        print ") " + entry

 

    return input(question) - 1

 

# визначаємо список предментів у кімнаті + двері

# зауважте, усі вони з літерою u спереду - це означає, що це юнікодові стрічки

items = [u"вазонок", u"картина", u"ваза", u"абажур", u"туфля", u"двері"]

 

# визначаємо змінну яка містить значення предмету під яким схований ключ

# пам'ятаючи, що нумерація у списку починається з нуля, у нашому випадку (2)

# ключ буде схований під вазою (ваза є 3ім елементом у списку items)

keylocation = 2

 

# цю змінну ми використовуватиме як флажочок, який вказуватиме нам чи знайшов

# гравець уже ключ, чи ще ні

# 0 - не знайшов, 1 - знайшов

# тобто початково гравець без ключа звісно ;)

keyfound = 0

 

# ця змінна говоритиме циклу чи продовжувати свою дію, якщо loop стане не 1,

# наприклад 0 - тоді цикл зупиниться. Таким чином, тіло циклу має можливість,

# через змінну loop, впливати на зупинку самого циклу.

loop = 1

 

# Виведемо привітання та деякі пояснення гравцю щодо гри. Легенда :)

print "Останньої ночі ви пішли спати у своєму комфортному ліжечку у "

print "власному домі."

print ""

 

print "Але тепер, пробудившись, опинився у закритій кімнаті. Ти не знаєш "

print "як ти попав туди, і навіть яка зараз година. В кімнаті ти бачиш"

print len(items), "речей:"

 

# в цикли роздрукуємо ці речі

for x in items:

    print x

print ""

print "Двері зачинені! Можливо ключ десь всередині кімнати?"

 

# хватить легенд і містики, вперед до гри!

 

# запускаємо цикл, який "бігатиме" допоки гравець не знайде ключа

while loop == 1:

    # використовуючи нашу функцію меню виводимо гравцю набір опцій для вибору

    # та просимо його зробити вибір

    choice = menu(items, "Що саме ти хочеш зараз перевірити? ")

 

    # скористаємося умовними операторами для перевірки, чи знайдено ключ у

    # обраній речі

    if choice == 0: # заглядаємо під вазонок

        if choice == keylocation: # ура! знайдено ключ

            print u"    Ти знайшов маленький ключик у вазонку!"

            # додаємо трохи вертикальних відступів для краси

            print ""

 

            # ключ знайдено, даємо комп'ютеру знати про цю подію використовуючи

            # наш, наперед визначений флажечок - keyfound

            keyfound = 1

        else: # невдача спіткала

            print u"    Ти нічого не знайшов у вазонку."

            print ""

    # і повторюємо процедуру для інших 4-ох речей

    elif choice == 1:

        if choice == keylocation:

            print u"    Ти знайшов маленький ключик за картиною!"

            print ""

            keyfound = 1

        else:

            print u"    Ти нічого не знайшов за картиною."

            print ""

    elif choice == 2:

        if choice == keylocation:

            print u"    Ти знайшов маленький ключик у вазі!"

            print ""

            keyfound = 1

        else:

            print u"    Ти нічого не знайшов у вазі."

            print ""

    elif choice == 3:

        if choice == keylocation:

            print u"    Ти знайшов маленький ключик над абажуром!"

            print ""

            keyfound = 1

        else:

            print u"    Ти нічого не знайшов над абажуром."

            print ""

 

    elif choice == 4:

        if choice == keylocation:

            print u"    Ти знайшов маленький ключик у туфлі!"

            print ""

            keyfound = 1

        else:

            print u"    Ти нічого не знайшов у туфлі."

            print ""

    # особливий вибір - двері

    elif choice == 5:

        # у двері можна пройти лише, коли вони відчені, а відчинити їх можна

        # лише якщо уже знайдений ключих був гравце у попередньому раунді циклу

        if keyfound == 1:

            # також завершуємо цикл

            loop = 0

            # відкрив?

            print u"    Ти вставив ключик у замкову щілину, провернув його, " \

                u"і... почув клік!"

            print ""

        else:

            # ні - треба шукати ключик спочатку

            print u"    Двері зачинені, спочатку треба знайти ключ."

            print ""

 

# ну і привітання переможцю :)

# пам'ятаємо - бекслеш (\) дозволяє перенести на наступний рядок стрічку коду,

# що ще не завершилась

print u"Світло пробивається у відкриту кімнату крізь відчинені тобою двері. " \

    u"Двері до твоєї свободи! :-)"

Так, досить проста, але цікава у кодуванні, гра. Не лякайтеся великої кількості коду у грі, близько 70 рядочків – це просто ‘if’ оператори, які насправді є однією з найпростішим частин програми. Спробуйте запустити гру у власному пітон інтерпретаторі та побавитись. Це також допоможе краще і легше зрозуміти суть коду. Якщо виникають питання стосовно логіки – постіть у коментарі. Але, загалом, надіюсь моїх коментарів у коді є достатньо, щоб осягнути загальну картину. Сподобалось? Якщо так, тоді у наступних уроках спробуємо більше ігор Опис : :)

Покращуємо Гру

Першим вашим питанням має бути “Ця гра працємо?”. Так. Тоді маєте мене запитати “Ця програма є добре написаною?” Логіка – добра, а от кількість рядочків можна зменшити. В грі ми використали функцію menu і це дозволило нам зменшити велику кількість рядків у програмі. А от ‘while’ цикл виглядає трохи “кучеряво” з усіма її вкладеними підрівнями коду, як на просту програму. Ми можемо це зробити краще! Коли ми з вами познайомимося з класами, ця програма матиме можливість набути значно кращого вигляду. Але покищо ми з вами можемо поправити кількість коду використавши старий добрий метод – створення фукцій. Це те, що ми вже освоїли з попереднього уроку. Напишемо функцію, яка прийматиме 2 аргументи – вибір гравця та місцезнаходження ключа. А повертатиме дана функція одну річ – чи був знайдений ключ. Давайте подивимося:

 

1

2

3

4

5

6

7

8

9

10

11

def check(choice, location):

    if choice == location:

        print ""

        print u"Ти знайшов ключ!"

        print ""

        return 1

    else:

        print ""

        print "Нічого цікавого тут."

        print ""

        return 0

Тепер маючи функцію check можемо трішки підправити нашу гру і зробити наш головний цикл трохи коротшим. У прикладі внизу я навів лише цикл, адже решта програми залишилася без змін:

 

1

2

3

4

5

6

7

8

9

while loop == 1:

    keyfound = check(menu(items, "Куди цього разу заглянемо? "), keylocation)

    if keyfound == 1:

        print u"    Ти вставив ключик у замкову щілину, провернув його, " \

            u"і... почув клік!"

        loop = 0

 

print u"Світло пробивається у відкриту кімнату крізь відчинені тобою двері. " \

    u"Двері до твоєї свободи! :-)"

Ух! Який маленький тепер цикл! З більше 70ти рядочків на менше 10ти! Звичайно, ви напевно вже здогадалися, що у даному варіанті циклу, ми втратили трохи функціоналу. Як от наприклад – окрема обробка дверей. Тепер усі речі однакові, і кроку з виходом через двері тепер немає. Тепер для виграшу достатньо знайти ключ, і все. Тобто гра стала трошки менш цікавою, а також трохи важчою для подальших можливих змін. Але цьому також можна зарадити декількома змінами у нашій функції check. Якими? Це вже вам на домашнє завдання.

На завершення

Якщо сподобалось, тоді пропоную вам на домашнє завдання спробувати написати власну просту пригодницьку гру на зразок тої, що ми написали протягом даного уроку. При цьому не забувайте звертатися до попередніх уроків по безцінний матеріал, що ми з вами проходили. Якщо важко з новою грою, тоді ось список покращень до нашої вже написаної гри:

·         додати кілька новий речей куди можна ховати ключ

·         замінити замок у дверях, який потребує двох ключів, тобто гравець повинен знайти два ключі, і аж тоді вийти

·         після кімнати запрограмувати вхід в коридор, звідти вихід у кухню, аж тоді на двір. Одним словом на скільки фантазія розіграється Опис : :)

·         намалювати гру у командній стрічці, 2d варіант. Обриси кімнати, речей. Це вже для advanced юзерів Опис : ;)

Дякую за спільно пройдений урок. Мені було цікаво його писати, надіюсь вам цікаво, а головне корисно, його вивчати. Далі розберемо з вами КЛАСИ і трошки ООП! Буде дуже повчально. Але спершу – перепочиньте! 

Чекаю на ваші коментарі:

 

 

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt