Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна программа игра "Змейка" с исходником, Срочно нужно программу игру "Змейку" 
:(
    Опции темы
BrutalizedProgrammer
Дата 29.5.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Народ, выручайте!!!

Надо программу игру "Змейка" с исходником, разумеется на асме,
что-то не могу найти данный артефакт в инете (((

Я сам пишу на Java и PHP, в асме не шарю, 
прогу надо на курсач, скоро сдача.. а я без проги.

Пацаны выручайте, иначе капец мне!...
PM MAIL ICQ   Вверх
Mikl_
Дата 29.5.2009, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



BrutalizedProgrammer, плохо ищешь  smile возьми здесь smile 
PM MAIL   Вверх
BrutalizedProgrammer
Дата 29.5.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



мужик спасибо большое )) крутая программа, но слишком сложная ))) неповерят ))
мне бы что-то попроще )
PM MAIL ICQ   Вверх
BrutalizedProgrammer
Дата 29.5.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



О нашел тут прожку простую ))
http://87.103.246.63/~nostalgy/forum/viewt...330a0f7c06de227

Код

; worm.asm 
; Игра "Питон" (или "Змея", или "Червяк"). Управление осуществляется клавишами 
; управления курсором, питон погибает, если он выходит за верхнюю или нижнюю 
; границу экрана или самопересекается. 

; Компиляция: 
; MASM: 
; masm.exe worm.asm worm.obj worm.lst 
; link worm.obj 
; exe2bin worm.exe worm.com 

;###################################################################### 
cgroup    group    CODE_SEG, DATA_SEG 
assume    cs:cgroup, ds:cgroup 

title PITON 
.186     ; для команды push 0A00h 

CODE_SEG segment byte public 
org    100h     ; COM-файл 
public    start 
start    proc    near 
mov    ax,cs     ; текущий сегментный адрес плюс 
add    ax,1000h    ; 1000h = следующий сегмент, 
mov    ds,ax     ; который будет использоваться 
; для адресов головы и хвоста 
push    0A000h     ; 0A000h - сегментный адрес 
pop    es     ; видеопамяти (в ES) 
mov    ax,13h     ; графический режим 13h 
int    10h 

mov    di,320*200 
mov    cx,600h     ; заполнить часть видеопамяти, 
; остающуюся за пределами 
rep    stosb     ; экрана, ненулевыми значениями 
; (чтобы питон не смог выйти за 
; пределы экрана) 
xor    si,si     ; начальный адрес хвоста в DS:SI 
mov    bp,10     ; начальная длина питона - 10 
jmp    init_food    ; создать первую еду 
main_cycle: 
; использование регистров в этой программе: 
; AX - различное 
; BX - адрес головы, хвоста или еды на экране 
; CX - 0 (старшее слово числа микросекунд для функции задержки) 
; DX - не используется (модифицируется процедурой random) 
; DS - сегмент данных программы (следующий после сегмента кода) 
; ES - видеопамять 
; DS:DI - адрес головы 
; DS:SI - адрес хвоста 
; BP - добавочная длина (питон растет, пока BP > 0, BP уменьшается на каждом шаге, 
; пока не станет нулем) 

mov    dx,40000    ; пауза - 20 000 микросекунд 
mov    ah,86h     ; (CX = 0 после REP STOSB и 
; больше не меняется) 
int    15h     ; задержка 

mov    ah,1     ; проверка состояния клавиатуры 
int    16h 
jz    short no_keypress    ; если клавиша не нажата - 
xor    ah,ah     ; AH = 0 - считать скан-код 
int    16h     ; нажатой клавиши в AH, 
cmp    ah,48h     ; если это стрелка вверх, 
jne    short not_up 
mov    word ptr cs:move_direction,-320 ; изменить 
; направление движения на "вверх", 
not_up: 
cmp    ah,50h     ; если это стрелка вниз, 
jne    short not_down 
mov    word ptr cs:move_direction,320 ; изменить 
; направление движения на "вниз", 
not_down: 
cmp    ah,4Bh     ; если это стрелка влево, 
jne    short not_left 
mov    word ptr cs:move_direction,-1 ; изменить 
; направление движения на "влево", 
not_left: 
cmp    ah,4Dh     ; если это стрелка вправо, 
jne    short no_keypress 
mov    word ptr cs:move_direction,1 ; изменить 
; направление движения на "вправо", 
no_keypress: 
and    bp,bp     ; если питон растет (BP > 0), 
jnz    short advance_head ; пропустить стирание хвоста, 
lodsw     ; иначе: считать адрес хвоста из 
; DS:SI в AX и увеличить SI на 2 
xchg    bx,ax 
mov    byte ptr es:[bx],0    ; стереть хвост на экране, 
mov    bx,ax 
inc    bp     ; увеличить BP, чтобы следующая 
; команда вернула его в 0, 
advance_head: 
dec    bp     ; уменьшить BP, так как питон 
; вырос на 1, если стирание хвоста было пропущено, или чтобы вернуть его в 0 - в 
; другом случае 
add    bx,word ptr cs:move_direction 
; bx = следующая координата головы 
mov    al,es:[bx]    ; проверить содержимое экрана в точке с 
; этой координатой, 
and    al,al     ; если там ничего нет, 
jz    short move_worm    ; передвинуть голову, 
cmp    al,0Dh     ; если там еда, 
je    short grow_worm    ; увеличить длину питона, 
mov    ax,3     ; иначе - питон умер, 
int    10h     ; перейти в текстовый режим 
retn     ; и завершить программу 

move_worm: 
mov    [di],bx    ; поместить адрес головы в DS:DI 
inc    di 
inc    di     ; и увеличить DI на 2, 
mov    byte ptr es:[bx],09    ; вывести точку на экран, 
cmp    byte ptr cs:eaten_food,1 ; если предыдущим 
; ходом была съедена еда, 
je    if_eaten_food ; создать новую еду, 
jmp    short main_cycle    ; иначе - продолжить основной 
; цикл 

grow_worm: 
push    bx     ; сохранить адрес головы 
mov    bx,word ptr cs:food_at    ; bx - адрес еды 
xor    ax,ax     ; AX = 0 
call    draw_food     ; стереть еду 
call    random     ; AX - случайное число 
and    ax,3Fh     ; AX - случайное число от 0 до 63 
mov    bp,ax     ; это число будет добавкой к 
; длине питона 
mov    byte ptr cs:eaten_food,1 ; установить флаг 
; для генерации еды на следующем ходе 
pop    bx     ; восстановить адрес головы BX 
jmp    short move_worm    ; перейти к движению питона 

if_eaten_food:     ; переход сюда, если еда была съедена 
mov    byte ptr cs:eaten_food,0 ; восстановить флаг 
init_food:     ; переход сюда в самом начале 
push    bx     ; сохранить адрес головы 
make_food: 
call    random     ; AX - случайное число 
and    ax,0FFFEh     ; AX - случайное четное число 
mov    bx,ax     ; BX - новый адрес для еды 
xor    ax,ax 
cmp    word ptr es:[bx],ax    ; если по этому адресу 
; находится тело питона 
jne    make_food    ; еще раз сгенерировать случайный адрес 
cmp    word ptr es:[bx+320],ax ; если на строку ниже 
; находится тело питона 
jne    make_food     ; то же самое 
mov    word ptr cs:food_at,bx    ; поместить новый адрес 
; еды в food_at, 
mov    ax,0D0Dh     ; цвет еды в AX 
call    draw_food     ; нарисовать еду на экране 
pop    bx 
jmp    main_cycle 
start    endp 


; процедура draw_food 
; изображает четыре точки на экране - две по адресу BX и две на следующей 
; строке. Цвет первой точки из пары - AL, второй - AH 

public    draw_food 

draw_food    proc    near 
mov    es:[bx],ax 
mov    word ptr es:[bx+320],ax 
retn 
draw_food    endp 
; генерация случайного числа 
; возвращает число в AX, модифицирует DX 

public    random 

random     proc    near    
mov    ax,word ptr cs:seed 
mov    dx,8E45h 
mul    dx 
inc    ax 
mov    cs:word ptr seed,ax 
retn 
random     endp 

CODE_SEG    ends 

;################################################################## 
DATA_SEG segment para public 
; переменные 

eaten_food    db    0 
move_direction    dw    1    ; направление движения: 1 - вправо, 
; -1 - влево, 320 - вниз, -320 - вверх 
seed:     ; это число хранится за концом, программы 
food_at     equ seed+2    ; а это - за предыдущим 
DATA_SEG    ends 

end    start


Добавлено @ 21:25
Тока здесь есть баг, когда кусает сам себя за хвост (или нажимаешь просто в обратную сторону), то он зависает.
Когда пересекаешь границу экрана, тоже иногда зависает.
Только оно как то через раз.. иногда зависает, иногда начинает игру сначала..... когда как вобщем ))) 

Вопрос вобщем решен, но я был бы несказанно рад, если б кто-то помог пофиксить эту проблему!

Это сообщение отредактировал(а) BrutalizedProgrammer - 2.6.2009, 19:02
PM MAIL ICQ   Вверх
Mikl_
Дата 2.6.2009, 08:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



BrutalizedProgrammer, используй тэги Код smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1064 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.