카테고리 없음
13주차 Snake bite
이승형
2023. 6. 10. 23:22
디자인코드
플레이 하면 시작하는버튼 배경화면 이미지 불러오기 나가기 버튼 구현
<Window x:Class="SnakeBiteWPF.MainWindow“
...
xmlns:local="clr-namespace:SnakeBiteWPF"
mc:Ignorable="d"
Title="SnakeBite WPF" Height="400" Width="525">
<Grid>
<Grid.Background>
<ImageBrush ImageSource="Images/tulip.jpg" Stretch="Fill"/>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Margin="20 30 0 0" Text="How to Play!"/>
<TextBlock Grid.Row="1" Margin="20 0 0 0" Text="Eat 25 Eggs using Arrow Keys"/>
<TextBlock Grid.Row="2" Margin="20 0 0 0" Text="Press ESC to pause while playing"/>
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="btnPlay" FontSize="18" FontWeight="Bold"
Content="Play" Width="100" Height="50" Margin="0 50 60 0 " Click="btnPlay_Click" />
<Button x:Name="btnQuit" FontSize="18" FontWeight="Bold"
Content="Quit" Width="100" Height="50" Margin="0 50 0 0" Click="btnQuit_Click" />
</StackPanel>
</Grid>
</Window>
게임 페이지 디자인코드
<Window x:Class="SnakeBiteWPF.Game"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SnakeBiteWPF"
mc:Ignorable="d"
Title="SnakeBite" Height="340" Width="420" KeyDown="Window_KeyDown" >
<Canvas x:Name="field" Width="420" Height="320" Background="LightBlue">
<TextBlock x:Name="txtScore" Margin="10" Canvas.Left="200" Text="Socre = 0"/>
<TextBlock x:Name="txtTimer" Margin="10" Canvas.Left="280" Text="Time = 0"/>
</Canvas>
</Window>
뱀과 알 CS 코드
public partial class Game : Window
{
Ellipse[] snakes = new Ellipse[30];
Ellipse egg;
Random r = new Random();
public Game()
{
InitializeComponent();
InitEgg(); // InitSnakes();
}
private void InitEgg()
{
egg = new Ellipse();
egg.Width = 10; egg.Height = 10;
egg.Stroke = Brushes.Black;
egg.Fill = Brushes.Red;
// Canvas의 크기: Width="420" Height="320"
int x = r.Next(0, 42);
int y = r.Next(0, 32);
Point p = new Point(x * 10, y * 10); // Point 구조체
egg.Tag = p;
field.Children.Add(egg);
Canvas.SetLeft(egg, x * 10);
Canvas.SetTop(egg, y * 10);
}
snake 관련 CS코드
private void InitSnakes()
{
int x = r.Next(0, 42);
int y = r.Next(0, 32);
for (int i = 0; i < 30; i++)
{
snakes[i] = new Ellipse();
snakes[i].Width = 10;
snakes[i].Height = 10;
if (i % 5 == 0)
snakes[i].Fill = Brushes.Green;
else
snakes[i].Fill = Brushes.Gold;
snakes[i].Stroke = Brushes.Black;
field.Children.Add(snakes[i]);
snakes[i].Tag = new Point(x * 10, (y + i) * 10);
Canvas.SetLeft(snakes[i], x * 10);
Canvas.SetTop(snakes[i], (y + i) * 10);
}
snakes[0].Fill = Brushes.Chocolate;
for (int i = visibleCount; i < 30; i++)
snakes[i].Visibility = Visibility.Hidden;
}
뱀이 알을 먹으면 발생하게 하는 선언
private void EatEgg()
{
Point pS = (Point)snakes[0].Tag;
Point pE = (Point)egg.Tag;
if (pS.X == pE.X && pS.Y == pE.Y)
{
egg.Visibility = Visibility.Hidden;
visibleCount++;
// 꼬리를 하나 늘림
snakes[visibleCount - 1].Visibility = Visibility.Visible;
txtScore.Text = "Eggs = " + (++eaten).ToString();
if (visibleCount == 30)
{
timer.Stop();
sw.Stop();
DrawSnakes();
TimeSpan ts = sw.Elapsed;
string tElapsed = String.Format("Time = {0:00}:{1:00}.{2:00}",
ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
MessageBox.Show("Success!!! " + tElapsed + " sec");
this.Close();
}
Point p = new Point(r.Next(1, 480 / size) * size,
r.Next(1, 380 / size) * size);
egg.Tag = p;
egg.Visibility = Visibility.Visible;
Canvas.SetLeft(egg, p.X);
Canvas.SetTop(egg, p.Y);
}