Я занялась программированием, и мне нужно написать игру четыре в ряд, это что-то наподобие крестиков-ноликов, но смысл состоит в том, что в в вертикальную доску сверху закидывают камушки, которые падают вниз. Задача каждого игрока, не дать противнику сделать комбинацию буквы Г, абсолютно все-равно как буква расположена, сидя, лежа, стоя)) У вас есть что-то похожее? Я однажды написала программу перевода арабских цифр в римские, и все мои знания заключаются на def, while, if, else, print, input, string, integer, float... слышала, есть random он как-то отвечает за случайный порядок, случайный выбор переменной?
Это могло бы пригодится в игре против компьютера, так ведь?
Python
программисты, заходите) нужно написать игру "Четыре в ряд", как изобразить игральное поле?
Ну, в общем, как-то так:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from random import randint
# задаём максимальную высоту столбца
H = 20
# выбираем число столбцов игрового поля
N = randint(3, 9)
# инициализируем игровое поле
field = [[0 for y in xrange(H)] for x in xrange(N)]
# процедура, возвращающая высоту столбца по номеру
def getHeight(x): return H - len([0 for f in field[x] if f == 0] if field[x][H-1] == 0 else [])
# процедура рисования игрового поля
def drawField():
for y in xrange(H-1, -1, -1): print(''.join(['.' if f[y] == 0 else ('X' if f[y] == 1 else 'O') for f in field]))
print('-'*N)
print(''.join([str(x+1) for x in xrange(N)]))
# процедура выбора игроком дальнейшего хода
def makeTurn():
result = -1
a = raw_input('Make your choice (1...%d, or q - exit) and hit < Enter >: ' % N)
if a == 'q': return result
try: result = int(a)
except: pass
if (result >= 1) and (result <= N) and getHeight(result-1) < H: return result
return makeTurn()
# процедура выбора компьютером дальнейшего хода
def computerTurn():
result = randint(1, N)
if getHeight(result-1) < H: return result
return computerTurn()
# процедура проверки выигрышной комбинации в точке x, y
def checkLocalWin(x, y, a):
# XX
# X
# X
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+2<H and field[x][y+2]==a and x+1<N and field[x+1][y+2]==a: return True
# XX
# .X
# .X
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+20 and field[x-1][y+2]==a: return True
# X
# X
# XX
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+2<H and field[x][y+2]==a and x+1<N and field[x+1][y]==a: return True
# .X
# .X
# XX
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+20 and field[x-1][y]==a: return True
# XXX
# ..X
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+20 and field[x+2][y-1]==a: return True
# XXX
# X
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+20 and field[x][y-1]==a: return True
# ..X
# XXX
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+2<N and field[x+2][y]==a and y<H and field[x+2][y+1]==a: return True
# X..
# XXX
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+2<N and field[x+2][y]==a and y<H and field[x][y+1]==a: return True
return False
# процедура проверки выигрышной комбинации по всему полю
def checkWin(a):
if len([1 for f in field if f[H-1] != 0]) == N: return True
if [1 for i in xrange(N*H) if checkLocalWin(i//H, i%H, a)] != []: return True
return False
# процедура объявления победителя
def printWin(a):
drawField()
if a == 1: print('YOU WIN!!!')
if a == 2: print('You loose....')
return True
# собственно программа
while (1):
drawField()
choice = makeTurn()
if choice < 0: break
field[choice-1][getHeight(choice-1)] = 1
if checkWin(1) and printWin(1): break
choice = computerTurn()
print 'computer choice: %d' % (choice)
field[choice-1][getHeight(choice-1)] = 2
if checkWin(2) and printWin(2): break
#!/usr/bin/python
# -*- coding: utf-8 -*-
from random import randint
# задаём максимальную высоту столбца
H = 20
# выбираем число столбцов игрового поля
N = randint(3, 9)
# инициализируем игровое поле
field = [[0 for y in xrange(H)] for x in xrange(N)]
# процедура, возвращающая высоту столбца по номеру
def getHeight(x): return H - len([0 for f in field[x] if f == 0] if field[x][H-1] == 0 else [])
# процедура рисования игрового поля
def drawField():
for y in xrange(H-1, -1, -1): print(''.join(['.' if f[y] == 0 else ('X' if f[y] == 1 else 'O') for f in field]))
print('-'*N)
print(''.join([str(x+1) for x in xrange(N)]))
# процедура выбора игроком дальнейшего хода
def makeTurn():
result = -1
a = raw_input('Make your choice (1...%d, or q - exit) and hit < Enter >: ' % N)
if a == 'q': return result
try: result = int(a)
except: pass
if (result >= 1) and (result <= N) and getHeight(result-1) < H: return result
return makeTurn()
# процедура выбора компьютером дальнейшего хода
def computerTurn():
result = randint(1, N)
if getHeight(result-1) < H: return result
return computerTurn()
# процедура проверки выигрышной комбинации в точке x, y
def checkLocalWin(x, y, a):
# XX
# X
# X
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+2<H and field[x][y+2]==a and x+1<N and field[x+1][y+2]==a: return True
# XX
# .X
# .X
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+20 and field[x-1][y+2]==a: return True
# X
# X
# XX
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+2<H and field[x][y+2]==a and x+1<N and field[x+1][y]==a: return True
# .X
# .X
# XX
if field[x][y]==a and y+1<H and field[x][y+1]==a and y+20 and field[x-1][y]==a: return True
# XXX
# ..X
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+20 and field[x+2][y-1]==a: return True
# XXX
# X
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+20 and field[x][y-1]==a: return True
# ..X
# XXX
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+2<N and field[x+2][y]==a and y<H and field[x+2][y+1]==a: return True
# X..
# XXX
if field[x][y]==a and x+1<N and field[x+1][y]==a and x+2<N and field[x+2][y]==a and y<H and field[x][y+1]==a: return True
return False
# процедура проверки выигрышной комбинации по всему полю
def checkWin(a):
if len([1 for f in field if f[H-1] != 0]) == N: return True
if [1 for i in xrange(N*H) if checkLocalWin(i//H, i%H, a)] != []: return True
return False
# процедура объявления победителя
def printWin(a):
drawField()
if a == 1: print('YOU WIN!!!')
if a == 2: print('You loose....')
return True
# собственно программа
while (1):
drawField()
choice = makeTurn()
if choice < 0: break
field[choice-1][getHeight(choice-1)] = 1
if checkWin(1) and printWin(1): break
choice = computerTurn()
print 'computer choice: %d' % (choice)
field[choice-1][getHeight(choice-1)] = 2
if checkWin(2) and printWin(2): break
Ого! У вас даже нет справки по Пайтону, а Вы уже хотите изобразить настоящую законченную программу! Интересно как? Я пайтона не знаю, но очевидно должен быть 2-х мерный массив n*m, где X - были бы единички, а пустота - 0. И небольшие функции: одна отвечала бы за вывод на экран, другая за детектирование Г (например, сначала детектирование линии, а потом ответвления на конце вверх или вниз), ну и функция ввода. Как-то так.
Erkin Abdybaev
Важно проработать алгоритм "поведения" игроков, ну и правильно, блок оценки результатов. А на каком языке это уже вторично!!!!
Александр Согонов
да, к сожалению нет... но так вот как-то, мне самой бы очень хотелось, чтоб мне кто-то хоть раз объяснил, какие возможности в принципе стоят к расположению, как их найти, но я не знаю этого... и пытаюсь все нарыть в интернете... может кто-то что-то скажет, умное, как вы например) я учусь, и уверенна что смогу)) потому что практически не зная основ я могла написать, программу, перевода в римские цифры, и еще две, где нужно было подставить формулы... хахах, смешно конечно, но я была жутко горда, что я смогла это сделать сама)) и вот надеюсь, что и с этим заданием мне удастся справится, хоть и не самой)) вот так вот)
Вы не скажете, моя изначальная идея, вверху под вопросом правильная или вообще нет...?
Вы не скажете, моя изначальная идея, вверху под вопросом правильная или вообще нет...?
это паскаль?
Александр Согонов
python
Похожие вопросы
- Выразите число в виде суммы четырех квадратов Нужно написать программу на python
- Как легко и быстро написать игру на Python
- нужно написать задачи на питоне
- Программирование на питон, нужно написать программу
- Помогите пожалуйста. Нужно написать рекурсивную функцию в python. Заранее благодарю!
- Нужно написать код на пайтон
- зачем программисту физика?
- Я хочу быть программистом, но я гуманитарий.
- Вопрос программистам самоучкам, которые уже работают!
- Тут есть именно опытные программисты?
У меня пайтон 3.5.2
может нужно что-то изменить?