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;
}
}
}
}
рисование кубика и его движение
нужно нарисовать закрашенный кубик(квадрат и 2 параллелограмма сверху и справа)
затем нужно чтобы он двигался по нажатию клавиш "вверх", "вниз", "вправо", "влево" на клавиатуре
Цитата: matann
Задание такое:
нужно нарисовать закрашенный кубик(квадрат и 2 параллелограмма сверху и справа)
затем нужно чтобы он двигался по нажатию клавиш "вверх", "вниз", "вправо", "влево" на клавиатуре
нужно нарисовать закрашенный кубик(квадрат и 2 параллелограмма сверху и справа)
затем нужно чтобы он двигался по нажатию клавиш "вверх", "вниз", "вправо", "влево" на клавиатуре
на каком языке?
на С# как то так, если я правильно понял что нужно
Код:
на ассемблере...((
на каком именно ассемблере?какую графическую библиотеку использовать?если масм,то,может вообще без графических библиотечек?ну,без глут\гл,а просто в окошечке нарисовать?
просто через командную строку компилирую и запускаю...
Цитата: matann
tasm я если честно в этом не очень разбираюсь((
просто через командную строку компилирую и запускаю...
просто через командную строку компилирую и запускаю...
это значит,что давать номера прерываний для рисования пикселов и чтения буфера клавиотуры нет смысла,а нужно кинуть сразу готовый код?
он ведь должен на нажатия клавиш до выхода из программы реагировать:)
а азчем циклы?есть же замечательный вектор 1ch,который мы можем невозбранно переписать под наши нужды.туда запихнуть проверку буффера клавы и се.завести одну глобальную переменную.вот,написать две-три функции для рисования объектов,им в параметре передавать эту глобальную переменную,которая и будет изменяться в 1ch,если его можно использовать.ну а в основном модуле уже-таки написать один какой-нибудь цикл проверки второй глобальной переменной,флажка,который будет установлен в 1,если,например,пользователь нажал клавишу 'q'
только не для меня...:(((
помогите пожалуйста....
Цитата: matann
помогите пожалуйста....
в чем должна заключаться помощь?в коде готовой программы?
в чем сможете...
могу помочь вам ограбить банк,могу написать всю программу за вас,могу расписать по пунктам и включить ссылки на используемые ресурсы
ооо.... я была бы Вам очень-очень благодарна...))))))))))))))))))
Код:
.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
.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
Цитата: Alm3n
кубик я не нарисовал,т.к. много времени тратится на всякие вырисовочки,а квадратик сделал.есть куча мест,которые можно оптимизировать,но времени у меня нет.вообще,по хорошему,эту программу нужно былоб застреилть еще при рождении:)но,мало ли,может вам понравится.компилилось tasm 5.0
Спасибо огромное!)))