Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

рисование кубика и его движение

63K
13 декабря 2010 года
matann
9 / / 12.12.2010
Задание такое:
нужно нарисовать закрашенный кубик(квадрат и 2 параллелограмма сверху и справа)
затем нужно чтобы он двигался по нажатию клавиш "вверх", "вниз", "вправо", "влево" на клавиатуре
29K
13 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: matann
Задание такое:
нужно нарисовать закрашенный кубик(квадрат и 2 параллелограмма сверху и справа)
затем нужно чтобы он двигался по нажатию клавиш "вверх", "вниз", "вправо", "влево" на клавиатуре



на каком языке?

на С# как то так, если я правильно понял что нужно

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace myArcanoid
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
            //перехват события формой
            this.KeyPreview = true;
            timer1.Enabled = true;
           
        }
       
        public int deltaX = 0;
        public int deltaY = 0;
   

        private void timer1_Tick(object sender, EventArgs e)
        {
                     
            panel1.Invalidate();
         
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            // двигающийся кубик
            e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 30 + deltaX, 30 + deltaY, 30 , 30 );
            // первый прямоугольник
            e.Graphics.FillRectangle(new SolidBrush(Color.Red), 130 , 30 , 100, 30);
            //второй прямоугольник
            e.Graphics.FillRectangle(new SolidBrush(Color.SaddleBrown), 200, 150 , 30, 100);
             
           
        }

       

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
            {
                deltaX -= 2;

            }
            if (e.KeyCode == Keys.Right)
            {
                deltaX += 2;
            }
            if (e.KeyCode == Keys.Down)
            {
                deltaY += 2;

            }
            if (e.KeyCode == Keys.Up)
            {
                deltaY -= 2;
            }
                   
           
        }

       

     
    }
}
63K
13 декабря 2010 года
matann
9 / / 12.12.2010
на ассемблере...((
316
13 декабря 2010 года
Alm3n
889 / / 29.05.2009
на каком именно ассемблере?какую графическую библиотеку использовать?если масм,то,может вообще без графических библиотечек?ну,без глут\гл,а просто в окошечке нарисовать?
63K
13 декабря 2010 года
matann
9 / / 12.12.2010
tasm я если честно в этом не очень разбираюсь((
просто через командную строку компилирую и запускаю...
316
13 декабря 2010 года
Alm3n
889 / / 29.05.2009
Цитата: matann
tasm я если честно в этом не очень разбираюсь((
просто через командную строку компилирую и запускаю...


это значит,что давать номера прерываний для рисования пикселов и чтения буфера клавиотуры нет смысла,а нужно кинуть сразу готовый код?

63K
13 декабря 2010 года
matann
9 / / 12.12.2010
во-первых, проблема с организацией циклов для перемещения... координаты сохранять в регистр или создать для них переменные и вообще будет ли это так работать?
он ведь должен на нажатия клавиш до выхода из программы реагировать:)
316
13 декабря 2010 года
Alm3n
889 / / 29.05.2009
а азчем циклы?есть же замечательный вектор 1ch,который мы можем невозбранно переписать под наши нужды.туда запихнуть проверку буффера клавы и се.завести одну глобальную переменную.вот,написать две-три функции для рисования объектов,им в параметре передавать эту глобальную переменную,которая и будет изменяться в 1ch,если его можно использовать.ну а в основном модуле уже-таки написать один какой-нибудь цикл проверки второй глобальной переменной,флажка,который будет установлен в 1,если,например,пользователь нажал клавишу 'q'
63K
13 декабря 2010 года
matann
9 / / 12.12.2010
как все просто!)
только не для меня...:(((
помогите пожалуйста....
316
13 декабря 2010 года
Alm3n
889 / / 29.05.2009
Цитата: matann
помогите пожалуйста....



в чем должна заключаться помощь?в коде готовой программы?

63K
13 декабря 2010 года
matann
9 / / 12.12.2010
в чем сможете...
316
13 декабря 2010 года
Alm3n
889 / / 29.05.2009
могу помочь вам ограбить банк,могу написать всю программу за вас,могу расписать по пунктам и включить ссылки на используемые ресурсы
63K
13 декабря 2010 года
matann
9 / / 12.12.2010
ооо.... я была бы Вам очень-очень благодарна...))))))))))))))))))
316
14 декабря 2010 года
Alm3n
889 / / 29.05.2009
Код:
.MODEL SMALL
.STACK 64
data segment
x1 dw 20
y1 dw 20
x2 dw 40
y2 dw 40
flag db 0
exit db 0
old_cs  dw  ?
old_ip  dw  ?
data    ends
code    segment
assume cs:code, ds:data

NEW_1C  proc    far
.386
    pusha
    mov ax,DATA
    mov ds, ax         
    mov ax, 40h    
    mov es, ax     
    mov ax, es:[1ch]   
    mov bx, es:[1ah]   
    cmp bx , ax        
    jne m0         
    jmp back           
m0: mov al, es:[bx]    
    mov es:[1ch], bx   
    cmp al, 30h        
    jnz m1             
    mov EXIT, 1        
    jmp back           
m1: cmp al, 38h     ; стрелка вверх
    jz  m2         
    cmp al, 32h     ; стрелка вниз
    jz  m3         
    cmp al, 34h     ; стрелка влево
    jz  m4         
    cmp al, 36h     ; стрелка вправо
    jz  m6         
    jmp back
m2: sub y1,10
    sub y2,10
    jmp mflag
m3: add y1,10
    add y2,10
    jmp mflag
m4: sub x1,10
    sub x2,10
    jmp mflag
m6: add x1,10
    add x2,10
mflag:mov flag,1
back:popa
    iret
NEW_1C  endp

MODE proc near
    mov ah,00h
    mov al,12h
    int 10h
    ret
MODE endp
   
SQUARE proc near
.386
pusha
mov cx,x1
mov dx,y1
c1:
mov ah,0ch
mov al,03h
int 10h
inc cx
cmp cx,x2
jne c1
mov cx,x1
inc dx
cmp dx,y2
jl c1
popa
ret
SQUARE endp

START: 
        mov ax, DATA
        mov ds, ax
        mov ah, 35h
        mov al, 1Ch
        int 21h
        mov old_ip, bx
        mov old_cs, es
        push ds
        mov dx, offset NEW_1C
        mov ax, seg NEW_1C
        mov ds, ax
        mov ah, 25h
        mov al, 1Ch
        int 21h        
        pop ds 

        call MODE
p1:     cmp EXIT, 0
        jne quit
        cmp flag,1h
        jne p1
        call MODE
        call SQUARE
        and flag,0h
        jmp p1
quit:   mov dx, old_ip 
        mov ax, old_cs 
        mov ds, ax     
        mov ah, 25h
        mov al, 1Ch
        int 21h
        mov ax, 4c00h  
        int 21h
CODE    ends
end START

кубик я не нарисовал,т.к. много времени тратится на всякие вырисовочки,а квадратик сделал.есть куча мест,которые можно оптимизировать,но времени у меня нет.вообще,по хорошему,эту программу нужно былоб застреилть еще при рождении:)но,мало ли,может вам понравится.компилилось tasm 5.0
63K
14 декабря 2010 года
matann
9 / / 12.12.2010
Цитата: Alm3n

кубик я не нарисовал,т.к. много времени тратится на всякие вырисовочки,а квадратик сделал.есть куча мест,которые можно оптимизировать,но времени у меня нет.вообще,по хорошему,эту программу нужно былоб застреилть еще при рождении:)но,мало ли,может вам понравится.компилилось tasm 5.0



Спасибо огромное!)))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог