Python

программисты, заходите) нужно написать игру "Четыре в ряд", как изобразить игральное поле?

Я занялась программированием, и мне нужно написать игру четыре в ряд, это что-то наподобие крестиков-ноликов, но смысл состоит в том, что в в вертикальную доску сверху закидывают камушки, которые падают вниз. Задача каждого игрока, не дать противнику сделать комбинацию буквы Г, абсолютно все-равно как буква расположена, сидя, лежа, стоя)) У вас есть что-то похожее? Я однажды написала программу перевода арабских цифр в римские, и все мои знания заключаются на def, while, if, else, print, input, string, integer, float... слышала, есть random он как-то отвечает за случайный порядок, случайный выбор переменной?
Это могло бы пригодится в игре против компьютера, так ведь?
Ну, в общем, как-то так:

#!/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
Денис Абраров
Денис Абраров
24 825
Лучший ответ
Александр Согонов спасибо, но почему у меня xrange is not defined?
У меня пайтон 3.5.2
может нужно что-то изменить?
Ого! У вас даже нет справки по Пайтону, а Вы уже хотите изобразить настоящую законченную программу! Интересно как? Я пайтона не знаю, но очевидно должен быть 2-х мерный массив n*m, где X - были бы единички, а пустота - 0. И небольшие функции: одна отвечала бы за вывод на экран, другая за детектирование Г (например, сначала детектирование линии, а потом ответвления на конце вверх или вниз), ну и функция ввода. Как-то так.
Erkin Abdybaev Важно проработать алгоритм "поведения" игроков, ну и правильно, блок оценки результатов. А на каком языке это уже вторично!!!!
Александр Согонов да, к сожалению нет... но так вот как-то, мне самой бы очень хотелось, чтоб мне кто-то хоть раз объяснил, какие возможности в принципе стоят к расположению, как их найти, но я не знаю этого... и пытаюсь все нарыть в интернете... может кто-то что-то скажет, умное, как вы например) я учусь, и уверенна что смогу)) потому что практически не зная основ я могла написать, программу, перевода в римские цифры, и еще две, где нужно было подставить формулы... хахах, смешно конечно, но я была жутко горда, что я смогла это сделать сама)) и вот надеюсь, что и с этим заданием мне удастся справится, хоть и не самой)) вот так вот)
Вы не скажете, моя изначальная идея, вверху под вопросом правильная или вообще нет...?
это паскаль?
Станислав @
Станислав @
10 099