c# 움직이는 적 구현과 총알충돌구현실험...ㅠㅠ
-
게시물 수정 , 삭제는 로그인 필요
움직이는적 구현 과 총알 충돌 시험입니다. 버그가 잔뜩나오네요 ㅠㅠ..
=========================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing;
namespace Project5
{
public class play
{
//=플래이어 좌표====
public int x = 10;
public int y = 20;
//=충돌좌표==========
public int position1;
public int position2;
public Random random = new Random();
// xposition x, y point
public Point xposition;
public Point xposition2;
// 총점수획득
public int total = 0;
public void enemyposition1()
{
xposition = new Point(random.Next(10, 60), 6);
Console.CursorVisible = false;
while (true)
{
Console.SetCursorPosition(xposition.X, xposition.Y);
Console.Write("#");
Console.SetCursorPosition(xposition.X - 1, xposition.Y);
Console.Write(" ");
xposition.X++;
Thread.Sleep(100);
if (xposition.X == 70)//x 측 오른쪽 70 이면 원위치...외벽 통과 방지
{
while (true)
{
Console.SetCursorPosition(xposition.X, xposition.Y);
Console.Write("#");
Console.SetCursorPosition(xposition.X + 1, xposition.Y);
Console.Write(" ");
xposition.X--;
Thread.Sleep(100);
if (xposition.X == 6)
{
break;
}
if((xposition == new Point(x - 1, y) || xposition == new Point(x + 1, y)))
{
break;
}
}
}
if (xposition.X == 70)//x축이 6이면 원위치..외벽통과 방지
{
while (true)
{
Console.SetCursorPosition(xposition.X, xposition.Y);
Console.Write("#");
Console.SetCursorPosition(xposition.X-1 , xposition.Y);
Console.Write(" ");
xposition.X++;
Thread.Sleep(100);
if (xposition.X == 70)
{
break;
}
if ((xposition == new Point(x - 1, y) || xposition == new Point(x + 1, y)))
{
break;
}
}
}
}
}
public void startposition()
{
//===========점수판 표시=========================
Console.SetCursorPosition(83, 9);
Console.WriteLine("획득 점수");
//============플래이어생성========================
Console.SetCursorPosition(x, y);
Console.Write("▲");
Console.CursorVisible = false;
bool run = true;
do
{
var input = Console.ReadKey();
switch (input.Key)
{
case ConsoleKey.LeftArrow:
Console.SetCursorPosition(x, y);
int m = --x;
Console.Write("▲");
Console.SetCursorPosition((m + 2), y);
Console.Write(" ");
if (x == 6)//x 측 원쪽 6 이면 원위치...외벽 통과 방지
{
x = 10; y = 20;
Console.SetCursorPosition(x, y);
Console.Write("▲");
Console.SetCursorPosition(6, y);
Console.Write(" ");
Thread.Sleep(20);
}
break;
case ConsoleKey.RightArrow:
Console.SetCursorPosition(x, y);
int mm = ++x;
Console.Write("▲");
Console.SetCursorPosition((mm - 2), y);
Console.Write(" ");
if (x == 70)//x 측 오른쪽 70 이면 원위치...외벽 통과 방지
{
x = 65; y = 20;
Console.SetCursorPosition(x, y);
Console.Write("▲");
Console.SetCursorPosition(70, y);
Console.Write(" ");
Thread.Sleep(20);
}
break;
case ConsoleKey.Spacebar:
// 충돌후 랜덤 위치 재 생성시 xposition 에 다시 할당하여야 하는
// point 로 x, y 좌표를 할당함
while (true)
{
Console.SetCursorPosition(x - 1, y);//1번 총알 좌표
Console.Write("*");
Console.SetCursorPosition(x + 1, y);//2번 총알 좌표
Console.Write("*");
y--;
Console.SetCursorPosition(x - 1, y + 2);//1번 총알 좌표 지워줌(y측 숫자늘리면 총알이 추가됨)
Console.Write(" ");
Console.SetCursorPosition(x + 1, y + 2);//2번 총알 좌표 지워줌(y측 숫자늘리면 총알이 추가됨)
Console.Write(" ");
Thread.Sleep(60);//총알 속도
// xposition 과 좌우 총알 중 하나라도 맞으면..
// 충돌 감지 후 적군 다이 시키고 .. 다시 좀비 적군 랜덤으로 재생성
if (xposition == new Point(x - 1, y) || xposition == new Point(x + 1, y))
{
total++;//맞춘 점수 더하기
xposition = new Point(random.Next(5, 30), 6);
Console.SetCursorPosition(xposition.X, 6);
//========랜덤 애니미 캐릭생성==========
char[] change = { 'A', 'B', 'C','D','E','F' };
Random changeenemy = new Random();
int key= changeenemy.Next(0, 5);
Console.Write(change[key]);
//======================================
Console.SetCursorPosition(87, 10);//점수표시 좌표
Console.WriteLine(total);
}
if(xposition2 == new Point(x - 1, y) || xposition2 == new Point(x + 1, y))
{
total++;//맟춘 점수 더하기
xposition2 = new Point(random.Next(31, 68), 6);//x측 31~68 로 위의 5~30 과 겹치기 방지
Console.SetCursorPosition(xposition2.X, 6);
//========랜덤 애니미 캐릭생성==========
char[] change = { 'G', 'H', 'I', 'J', 'K', 'L' };
Random changeenemy1 = new Random();
int key1 = changeenemy1.Next(0, 5);
Console.Write(change[key1]);
//======================================
Console.SetCursorPosition(87, 10);//점수표시 좌표
Console.WriteLine(total);
}
if (y != 3) continue; // y 축 으로 총알 최대 도달 거리
Console.SetCursorPosition(x - 1, y + 1);//마지막 총알 자국 지워줌
Console.Write(string.Empty.PadLeft(1));
Console.SetCursorPosition(x + 1, y + 1);//마지막 총알 자국 지워줌
Console.Write(string.Empty.PadLeft(1));
y = 20;// y축 좌표 원위치
break;
}
break;
// 방향키 스페이스 키를 제외한 키를 누르면
// 게임종료 하기 기능
default: run = false; break;
}
Console.SetCursorPosition(x, y);//플래이어 지워지기 방지
Console.Write("▲");
} while (run);
}
}
public class display
{
public int xx = 3;
public int yy = 3;
public void board()
{
char block = '■';
Console.CursorVisible = false;
Console.SetCursorPosition(xx, yy);
for (int i = 0; i < 20; i++)
{
Console.SetCursorPosition(xx, yy++);
Console.WriteLine(block);
}
Console.SetCursorPosition(xx, yy);
for (int i = 0; i < 70; i++)
{
yy = 3;
Console.SetCursorPosition(xx++, yy);
Console.WriteLine(block);
}
Console.SetCursorPosition(3, 20);
xx = 3; yy = 23;
for (int i = 0; i < 70; i++)
{
Console.SetCursorPosition(xx++, yy);
Console.WriteLine(block);
}
xx = 73; yy = 3;
for (int i = 0; i < 21; i++)
{
Console.SetCursorPosition(xx, yy++);
Console.WriteLine(block);
}
for (int i = 0; i < 13; i++)
{
Console.SetCursorPosition(81+i, 8);
Console.WriteLine(block);
}
for (int i = 0; i < 4; i++)
{
Console.SetCursorPosition(81 , 8+i);
Console.WriteLine(block);
}
for (int i = 0; i < 4; i++)
{
Console.SetCursorPosition(93, 8 + i);
Console.WriteLine(block);
}
for (int i = 0; i < 13; i++)
{
Console.SetCursorPosition(81+i, 11 );
Console.WriteLine(block);
}
Console.SetCursorPosition(75, 5);
Console.WriteLine("# 맟히면 랜덤으로 알파뱃이 생성되며 ");
Console.SetCursorPosition(83, 6);
Console.WriteLine("1점을 획득합니다.");
}
}
public class PlayGame
{
public void Start()
{
play play = new play();
display display = new display();//태스트를 위해 설정해 놓음
Thread work = new Thread(new ThreadStart(play.enemyposition1));//태스트를 위해 설정해놓음
display.board();
work.Start();
play.startposition();
}
static void Main(string[] args)
{
PlayGame playGame = new PlayGame();
play play = new play();
playGame.Start();
}
}
}
#c# 움직이는 이미지 #c# 움직이는 텍스트