자연스럽게 좌우 이동하면서 일정 시간이 지나면 블록이 아래로 이동하도록 하는 방법을 설명해드릴게요.

1. 기본 구조

  • map[20,20] 배열을 사용하여 게임 맵을 구성
  • -1을 좌우 및 하단에 배치하여 경계를 설정
  • 색깔은 1~10 범위에서 랜덤 설정
  • 일정 시간이 지나면 블록이 아래로 이동

2. 좌우 이동 및 중력 처리

(1) 타이머 사용

WinForms의 Timer 컨트롤을 활용하여 좌우 이동 및 중력 적용을 분리하여 처리할 수 있습니다.

  • 좌우 이동 → 사용자의 방향키 입력 시 즉시 실행
  • 아래 이동(중력 적용) → Timer를 이용해 일정 주기로 실행

(2) 변수 및 로직

 
private int[,] map = new int[20, 20]; // 게임 맵 private int playerX = 10; // 플레이어 위치 (초기 X 좌표) private int playerY = 0; // 플레이어 위치 (초기 Y 좌표) private Timer gravityTimer; private int gravityInterval = 1000; // 중력 적용 주기 (1초)

(3) 중력 타이머 설정

 
gravityTimer = new Timer(); gravityTimer.Interval = gravityInterval; gravityTimer.Tick += GravityMove; gravityTimer.Start();

(4) 좌우 이동 처리

 
protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Left) { if (playerX > 0 && map[playerY, playerX - 1] != -1) // 왼쪽 이동 가능하면 { playerX--; Invalidate(); // 화면 다시 그리기 } } else if (e.KeyCode == Keys.Right) { if (playerX < 19 && map[playerY, playerX + 1] != -1) // 오른쪽 이동 가능하면 { playerX++; Invalidate(); } } }

(5) 중력 적용 함수

 
private void GravityMove(object sender, EventArgs e) { if (playerY < 19 && map[playerY + 1, playerX] == 0) // 아래 이동 가능하면 { playerY++; Invalidate(); } }

3. 부드러운 이동을 위한 개선

(1) 애니메이션 적용

키를 한 번 누르면 즉시 이동하는 방식보다, 누르고 있으면 연속 이동이 되도록 하면 부드러워집니다. 이를 위해 KeyDown과 KeyUp 이벤트를 함께 사용하면 됩니다.

 
private bool movingLeft = false; private bool movingRight = false; private Timer moveTimer; public Form1() { InitializeComponent(); moveTimer = new Timer(); moveTimer.Interval = 100; // 연속 이동 속도 moveTimer.Tick += MovePlayer; } protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Left) { movingLeft = true; moveTimer.Start(); } else if (e.KeyCode == Keys.Right) { movingRight = true; moveTimer.Start(); } } protected override void OnKeyUp(KeyEventArgs e) { if (e.KeyCode == Keys.Left) movingLeft = false; if (e.KeyCode == Keys.Right) movingRight = false; if (!movingLeft && !movingRight) moveTimer.Stop(); } private void MovePlayer(object sender, EventArgs e) { if (movingLeft && playerX > 0 && map[playerY, playerX - 1] != -1) { playerX--; } else if (movingRight && playerX < 19 && map[playerY, playerX + 1] != -1) { playerX++; } Invalidate(); }

4. 최종 정리

✅ Timer를 사용하여 일정 시간마다 블록이 아래로 이동
✅ KeyDown 및 KeyUp을 사용하여 자연스럽게 좌우 이동
✅ moveTimer를 사용하여 키를 누르고 있을 때 부드럽게 이동

이렇게 하면 좌우 이동과 중력을 자연스럽게 적용할 수 있습니다.
추가로 블록 충돌 처리, 쌓이기 등의 기능도 필요하면 확장하면 됩니다. 

 

Form1.cs
0.00MB

'헥사' 카테고리의 다른 글

Systehttp://m.Drawing.Color[] colorindex = new Systehttp://m.Drawing.Color[]  (0) 2023.11.29
MM_DRAW()  (0) 2023.11.29
헥사 개발코드관련  (0) 2021.04.27


Systehttp://m.Drawing.Color[] colorindex = new Systehttp://m.Drawing.Color[]
{
Systehttp://m.Drawing.Color.AliceBlue, ////240,248,255
Systehttp://m.Drawing.Color.AntiqueWhite, ////250,235,215
Systehttp://m.Drawing.Color.Aqua, ////0,255,255
Systehttp://m.Drawing.Color.Aquamarine, ////127,255,212
Systehttp://m.Drawing.Color.Azure, ////240,255,255
Systehttp://m.Drawing.Color.Beige, ////245,245,220
Systehttp://m.Drawing.Color.Bisque, ////255,228,196
Systehttp://m.Drawing.Color.Black, ////0,0,0
Systehttp://m.Drawing.Color.BlanchedAlmond, ////255,255,205
Systehttp://m.Drawing.Color.Blue, ////0,0,255
Systehttp://m.Drawing.Color.BlueViolet, ////138,43,226
Systehttp://m.Drawing.Color.Brown, ////165,42,42
Systehttp://m.Drawing.Color.BurlyWood, ////222,184,135
Systehttp://m.Drawing.Color.CadetBlue, ////95,158,160
Systehttp://m.Drawing.Color.Chartreuse, ////127,255,0
Systehttp://m.Drawing.Color.Chocolate, ////210,105,30
Systehttp://m.Drawing.Color.Coral, ////255,127,80
Systehttp://m.Drawing.Color.CornflowerBlue, ////100,149,237
Systehttp://m.Drawing.Color.Cornsilk, ////255,248,220
Systehttp://m.Drawing.Color.Crimson, ////220,20,60
Systehttp://m.Drawing.Color.Cyan, ////0,255,255
Systehttp://m.Drawing.Color.DarkBlue, ////0,0,139
Systehttp://m.Drawing.Color.DarkCyan, ////0,139,139
Systehttp://m.Drawing.Color.DarkGoldenrod, ////184,134,11
Systehttp://m.Drawing.Color.DarkGray, ////169,169,169
Systehttp://m.Drawing.Color.DarkGreen, ////0,100,0
Systehttp://m.Drawing.Color.DarkKhaki, ////189,183,107
Systehttp://m.Drawing.Color.DarkMagena, ////139,0,139
Systehttp://m.Drawing.Color.DarkOliveGreen, ////85,107,47
Systehttp://m.Drawing.Color.DarkOrange, ////255,140,0
Systehttp://m.Drawing.Color.DarkOrchid, ////153,50,204
Systehttp://m.Drawing.Color.DarkRed, ////139,0,0
Systehttp://m.Drawing.Color.DarkSalmon, ////233,150,122
Systehttp://m.Drawing.Color.DarkSeaGreen, ////143,188,143
Systehttp://m.Drawing.Color.DarkSlateBlue, ////72,61,139
Systehttp://m.Drawing.Color.DarkSlateGray, ////40,79,79
Systehttp://m.Drawing.Color.DarkTurquoise, ////0,206,209
Systehttp://m.Drawing.Color.DarkViolet, ////148,0,211
Systehttp://m.Drawing.Color.DeepPink, ////255,20,147
Systehttp://m.Drawing.Color.DeepSkyBlue, ////0,191,255
Systehttp://m.Drawing.Color.DimGray, ////105,105,105
Systehttp://m.Drawing.Color.DodgerBlue, ////30,144,255
Systehttp://m.Drawing.Color.Firebrick, ////178,34,34
Systehttp://m.Drawing.Color.FloralWhite, ////255,250,240
Systehttp://m.Drawing.Color.ForestGreen, ////34,139,34
Systehttp://m.Drawing.Color.Fuschia, ////255,0,255
Systehttp://m.Drawing.Color.Gainsboro, ////220,220,220
Systehttp://m.Drawing.Color.GhostWhite, ////248,248,255
Systehttp://m.Drawing.Color.Gold, ////255,215,0
Systehttp://m.Drawing.Color.Goldenrod, ////218,165,32
Systehttp://m.Drawing.Color.Gray, ////128,128,128
Systehttp://m.Drawing.Color.Green, ////0,128,0
Systehttp://m.Drawing.Color.GreenYellow, ////173,255,47
Systehttp://m.Drawing.Color.Honeydew, ////240,255,240
Systehttp://m.Drawing.Color.HotPink, ////255,105,180
Systehttp://m.Drawing.Color.IndianRed, ////205,92,92
Systehttp://m.Drawing.Color.Indigo, ////75,0,130
Systehttp://m.Drawing.Color.Ivory, ////255,240,240
Systehttp://m.Drawing.Color.Khaki, ////240,230,140
Systehttp://m.Drawing.Color.Lavender, ////230,230,250
Systehttp://m.Drawing.Color.LavenderBlush, ////255,240,245
Systehttp://m.Drawing.Color.LawnGreen, ////124,252,0
Systehttp://m.Drawing.Color.LemonChiffon, ////255,250,205
Systehttp://m.Drawing.Color.LightBlue, ////173,216,230
Systehttp://m.Drawing.Color.LightCoral, ////240,128,128
Systehttp://m.Drawing.Color.LightCyan, ////224,255,255
Systehttp://m.Drawing.Color.LightGoldenrodYellow, ////250,250,210
Systehttp://m.Drawing.Color.LightGray, ////211,211,211
Systehttp://m.Drawing.Color.LightGreen, ////144,238,144
Systehttp://m.Drawing.Color.LightPink, ////255,182,193
Systehttp://m.Drawing.Color.LightSalmon, ////255,160,122
Systehttp://m.Drawing.Color.LightSeaGreen, ////32,178,170
Systehttp://m.Drawing.Color.LightSkyBlue, ////135,206,250
Systehttp://m.Drawing.Color.LightSlateGray, ////119,136,153
Systehttp://m.Drawing.Color.LightSteelBlue, ////176,196,222
Systehttp://m.Drawing.Color.LightYellow, ////255,255,224
Systehttp://m.Drawing.Color.Lime, ////0,255,0
Systehttp://m.Drawing.Color.LimeGreen, ////50,205,50
Systehttp://m.Drawing.Color.Linen, ////250,240,230
Systehttp://m.Drawing.Color.Magenta, ////255,0,255
Systehttp://m.Drawing.Color.Maroon, ////128,0,0
Systehttp://m.Drawing.Color.MediumAquamarine, ////102,205,170
Systehttp://m.Drawing.Color.MediumBlue, ////0,0,205
Systehttp://m.Drawing.Color.MediumOrchid, ////186,85,211
Systehttp://m.Drawing.Color.MediumPurple, ////147,112,219
Systehttp://m.Drawing.Color.MediumSeaGreen, ////60,179,113
Systehttp://m.Drawing.Color.MediumSlateBlue, ////123,104,238
Systehttp://m.Drawing.Color.MediumSpringGreen, ////0,250,154
Systehttp://m.Drawing.Color.MediumTurquoise, ////72,209,204
Systehttp://m.Drawing.Color.MediumVioletRed, ////199,21,112
Systehttp://m.Drawing.Color.MidnightBlue, ////25,25,112
Systehttp://m.Drawing.Color.MintCream, ////245,255,250
Systehttp://m.Drawing.Color.MistyRose, ////255,228,225
Systehttp://m.Drawing.Color.Moccasin, ////255,228,181
Systehttp://m.Drawing.Color.NavajoWhite, ////255,222,173
Systehttp://m.Drawing.Color.Navy, ////0,0,128
Systehttp://m.Drawing.Color.OldLace, ////253,245,230
Systehttp://m.Drawing.Color.Olive, ////128,128,0
Systehttp://m.Drawing.Color.OliveDrab, ////107,142,45
Systehttp://m.Drawing.Color.Orange, ////255,165,0
Systehttp://m.Drawing.Color.OrangeRed, ////255,69,0
Systehttp://m.Drawing.Color.Orchid, ////218,112,214
Systehttp://m.Drawing.Color.PaleGoldenrod, ////238,232,170
Systehttp://m.Drawing.Color.PaleGreen, ////152,251,152
Systehttp://m.Drawing.Color.PaleTurquoise, ////175,238,238
Systehttp://m.Drawing.Color.PaleVioletRed, ////219,112,147
Systehttp://m.Drawing.Color.PapayaWhip, ////255,239,213
Systehttp://m.Drawing.Color.PeachPuff, ////255,218,155
Systehttp://m.Drawing.Color.Peru, ////205,133,63
Systehttp://m.Drawing.Color.Pink, ////255,192,203
Systehttp://m.Drawing.Color.Plum, ////221,160,221
Systehttp://m.Drawing.Color.PowderBlue, ////176,224,230
Systehttp://m.Drawing.Color.Purple, ////128,0,128
Systehttp://m.Drawing.Color.Red, ////255,0,0
Systehttp://m.Drawing.Color.RosyBrown, ////188,143,143
Systehttp://m.Drawing.Color.RoyalBlue, ////65,105,225
Systehttp://m.Drawing.Color.SaddleBrown, ////139,69,19
Systehttp://m.Drawing.Color.Salmon, ////250,128,114
Systehttp://m.Drawing.Color.SandyBrown, ////244,164,96
Systehttp://m.Drawing.Color.SeaGreen, ////46,139,87
Systehttp://m.Drawing.Color.Seashell, ////255,245,238
Systehttp://m.Drawing.Color.Sienna, ////160,82,45
Systehttp://m.Drawing.Color.Silver, ////192,192,192
Systehttp://m.Drawing.Color.SkyBlue, ////135,206,235
Systehttp://m.Drawing.Color.SlateBlue, ////106,90,205
Systehttp://m.Drawing.Color.SlateGray, ////112,128,144
Systehttp://m.Drawing.Color.Snow, ////255,250,250
Systehttp://m.Drawing.Color.SpringGreen, ////0,255,127
Systehttp://m.Drawing.Color.SteelBlue, ////70,130,180
Systehttp://m.Drawing.Color.Tan, ////210,180,140
Systehttp://m.Drawing.Color.Teal, ////0,128,128
Systehttp://m.Drawing.Color.Thistle, ////216,191,216
Systehttp://m.Drawing.Color.Tomato, ////253,99,71
Systehttp://m.Drawing.Color.Turquoise, ////64,224,208
Systehttp://m.Drawing.Color.Violet, ////238,130,238
Systehttp://m.Drawing.Color.Wheat, ////245,222,179
Systehttp://m.Drawing.Color.White, ////255,255,255
Systehttp://m.Drawing.Color.WhiteSmoke, ////245,245,245
Systehttp://m.Drawing.Color.Yellow, ////255,255,0
Systehttp://m.Drawing.Color.YellowGreen, ////154,205,50
};

'헥사' 카테고리의 다른 글

좌우 이동 및 중력 처리  (0) 2025.03.19
MM_DRAW()  (0) 2023.11.29
헥사 개발코드관련  (0) 2021.04.27

void MM_DRAW()
{
    int xx=0, yy=0, width=0, height=0;

    for(int ii=0; ii<MAPY-1; ii++)
    {
        for(int kk=1; kk<MAPX-1; kk++)
        {
            xx = (kk-1) * (     this.Width/     (MAPX-2)      );
            yy = (ii) * (     (this.ClientRectangle.Height)/    (MAPY-1)    );
            width = (this.Width /(MAPX-2));
            height=((this.ClientRectangle.Height/(MAPY-1));

             if(toggle_for_draw==0)
             {
                 if(hexa[ii,kk] > 0) MM_FORE_DRAW(xx,yy,width,height,DEFINENM.colorindex[     hexa[ii,kk]     ]);
                 else MM_BACK_DRAW(xx,yy,width,height);
             }
             else
             {
                 if(hexa_copy_for_draw[ii,kk] != hexa[ii,kk])
                 {
                     if(hexa[ii,kk]>0) MM_FORE_DRAW(xx,yy,width,height,DEFINENM.colorindex[     hexa[ii,kk]     ]);
                     else MM_BACK_DRAW(xx,yy,width,height);
                 }
             }
        }
    }
}

void MM_FORE_DRAW(int xx, int yy, int width, int height, System.Drawing.Color ____color)
{
    System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(____color);
    System.Drawing.Pen myPen = new System.Drawing.Pen( System.Drawing.Color.LightGray, 1);
    System.Drawing.Graphics myGraphic;
    myGraphic=this.CreateGraphics();
    myGraphic.FillRectangle(myBrush, new Rectangle(xx,yy,width,height));
    myGraphic.DrawRectangle(myPen,xx,yy,width,height);
}

void MM_BACK_DRAW(int xx, int yy, int width, int height)
{
    System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(    System.Drawing.Color.LightYelow);
    System.Drawing.Pen myPen = new System.Drawing.Pen( System.Drawing.Color.LightGray, 1);
    System.Drawing.Graphics myGraphic;
    myGraphic=this.CreateGraphics();
    myGraphic.FillRectangle(myBrush, new Rectangle(xx,yy,width,height));
    myGraphic.DrawRectangle(myPen,xx,yy,width,height);
}

# OS
1. WIndows 10
- c# console hexa code(IDE:editor,Compiler:csc)

frm_hexa_3.cs
0.01MB



- c# window form hexa code(IDE:Visual Studio)

APINFQ0020.cs
0.02MB


- c,c++ console hexa code(IDE:editor,Compiler:gcc)

mainsrc.c
0.00MB
common.h
0.00MB
wincommon.c
0.01MB


- c,c++ window form hexa code(IDE:Visual Studio)

winmainsrc.c
0.01MB
wincommon.h
0.00MB
wincommon.c
0.01MB


- pascal window form hexa code(IDE:DELPHI) 
- javascript web-browser hexa code(IDE:editor)

____real_fast_no_ajax_hexa.html
0.02MB


- java console hexa code(IDE:editor,Compiler:javac)

 

2. Linux(Ubuntu,Centos)
- c,c++ console hexa code(IDE:editor,Compiler:gcc,실행도구:telnet terminal)
- javascript web-browser hexa code(IDE:editor,실행도구:desktop mode)

3. Windows 10 + Linux was(tomcat)
- javascript web-browser network hexa code(feat. AJAX)

# Compiler
1. windows 10 c# console - csc(freeware)
2. windows 10 c# form - visual studio(freeware at private, but company is not free)

3. windows 10 c,c++ console - gcc(freeware)
4. windows 10 c,c++ form - visual studio(freeware at private, but company is not free)

5. windows 10 pascal form - DELPHI (freeware at private, but company is not free)
6. windows 10, Linux javascript - web-browser is OK

 

 

Question into xterm92@naver.com

'헥사' 카테고리의 다른 글

좌우 이동 및 중력 처리  (0) 2025.03.19
Systehttp://m.Drawing.Color[] colorindex = new Systehttp://m.Drawing.Color[]  (0) 2023.11.29
MM_DRAW()  (0) 2023.11.29

+ Recent posts