public void CreateMaze(int _w, int _h) { var maze = new MazeGenerator(_w, _h, null); var w = new BlockMaze(maze); for (var y = 0; y < w.Height; y++) { Console.Write(new string(' ', 8)); for (var x = 0; x < w.Width; x++) { var v = w.Walls[x][y]; var p = new Panel(); p.SetBounds(16 + x * 16, 16 + y * 16, 15, 15); if (!v) { p.BackColor = Color.White; } else { p.BackColor = Color.Black; } this.Controls.Add(p); } } this.ClientSize = new Size(16 * (w.Width + 2), 16 * (w.Height + 2)); }
public OrcasAvalonApplicationCanvas() { Width = DefaultWidth; Height = DefaultHeight; this.ClipToBounds = true; Colors.Blue.ToGradient(Colors.Black, DefaultHeight / 4).Select( (c, i) => new Rectangle { Fill = new SolidColorBrush(c), Width = DefaultWidth, Height = 5, }.MoveTo(0, i * 4).AttachTo(this) ).ToArray(); var mouse = new Image { Source = (KnownAssets.Path.Assets + "/mouse.png").ToSource(), Width = 32, Height = 32 }.MoveTo(0, 0).AttachTo(this); var img = new Image { Source = (KnownAssets.Path.Assets + "/jsc.png").ToSource() }.MoveTo(DefaultWidth - 96, 0).AttachTo(this); var Content = new Canvas { Width = DefaultWidth, Height = DefaultHeight, }.AttachTo(this); var ContentY = new AnimatedDouble(0); ContentY.ValueChanged += y => Content.MoveTo(0, y); { var maze = new MazeGenerator(12, 8, null); var blocks = new BlockMaze(maze); var w = new BlockMaze(maze); Colors.Black.ToGradient(Colors.Yellow, 30).ForEach( (c, i) => RenderMaze(60 + i * 0.1, w, new SolidColorBrush(c), Content) ); } var TouchOverlay = new Rectangle { Fill = Brushes.Yellow, Opacity = 0, Width = DefaultWidth, Height = DefaultHeight }.AttachTo(this); TouchOverlay.MouseEnter += delegate { mouse.Show(); }; TouchOverlay.MouseLeave += delegate { mouse.Hide(); }; TouchOverlay.Cursor = Cursors.None; TouchOverlay.MouseMove += (s, args) => { var p = args.GetPosition(this); mouse.MoveTo(p.X - 4, p.Y - 4); }; TouchOverlay.MouseLeftButtonUp += (s, args) => { var p = args.GetPosition(this); ShowExplosion(Convert.ToInt32(p.X), Convert.ToInt32(p.Y), Content); ("assets/AvalonMouseMaze/explosion.mp3").PlaySound(); 150.AtDelay( delegate { ShowExplosion(Convert.ToInt32(p.X + 6), Convert.ToInt32(p.Y - 6), Content); } ); 300.AtDelay( delegate { ShowExplosion(Convert.ToInt32(p.X + 4), Convert.ToInt32(p.Y + 6), Content); ContentY.SetTarget(DefaultHeight); } ); 1500.AtDelay( delegate { ContentY.SetTarget(0); } ); }; new GameMenuWithGames(DefaultWidth, DefaultHeight, 32).AttachContainerTo(this).Hide(); }
private void RenderMaze(double z, BlockMaze w, Brush Fill, Canvas Content) { Action<double, double> fillRect = (_x, _y) => { new Rectangle { Fill = Fill, Width = z / 2, Height = z / 2 }.MoveTo(_x, _y).AttachTo(Content); }; for (int x = 0; x < w.Width; x++) for (int y = 0; y < w.Height; y++) { var v = w.Walls[x][y]; if (v) fillRect( (DefaultWidth / 2) + (x - w.Width / 2) * z / 2, (DefaultHeight / 2) + (y - w.Height / 2) * z / 2); } }
private void CreateMapFromMaze() { var Map = new Texture32(); #region safe map for (int i = 0; i < 32; i++) for (int j = 0; j < 32; j++) { Map[i, j] = bluewall; } #endregion maze = new BlockMaze(new MazeGenerator(MazeSize, MazeSize, null)); #region write walls to map var wall_counter = 0; for (int x = 1; x < maze.Width - 1; x++) for (int y = 1; y < maze.Height - 1; y++) { if (maze.Walls[x][y]) { wall_counter++; var variant = graywall; if (y > maze.Height / 2) { variant = woodwall; if (wall_counter % 7 == 0) variant = woodwall_books; if (wall_counter % 11 == 0) variant = woodwall_achtung; else if (wall_counter % 13 == 0) variant = woodwall_verboten; } else { variant = graywall; if (wall_counter % 8 == 0) variant = graywall_achtung; else if (wall_counter % 9 == 0) variant = graywall_verboten; } Map[x, y] = variant; } else Map[x, y] = 0; } #endregion #region maze is smaller than 31 for (int x = 1; x < maze.Width - 1; x++) { Map[x, maze.Height - 1] = greenwall; } for (int y = 1; y < maze.Height - 1; y++) { Map[maze.Width - 1, y] = greenwall; } #endregion EgoView.Map.WorldMap = Map; }
private void InitializeCanvasDrawing(Canvas c) { Action<int, int> fillRect = (_x, _y) => { new Rectangle { Fill = Brushes.GreenYellow, Width = z / 2, Height = z / 2 }.MoveTo(_x, _y).AttachTo(c); }; int x, y; var offset = 0; var w = new BlockMaze(maze); for (x = 0; x < w.Width; x++) for (y = 0; y < w.Height; y++) { var v = w.Walls[x][y]; if (v) fillRect(maze.Width * z + x * z / 2, z + y * z / 2); } for (x = 1; x < maze.Width - 1; x++) for (y = 1; y < maze.Height - 1; y++) { var v = maze[x, y]; var IsTop = (v & 1) != 0; var IsLeft = (v & 4) != 0; var IsBottom = (v & 2) != 0; var IsRight = (v & 8) != 0; fillRect(offset + x * z + z / 4, y * z + z / 4); if (!IsTop) fillRect(offset + x * z + z / 4, y * z - z / 4); if (!IsBottom) fillRect(offset + x * z + z / 4, y * z + z * 3 / 4); if (!IsLeft) fillRect(offset + x * z - z / 4, y * z + z / 4); if (!IsRight) fillRect(offset + x * z + z * 3 / 4, y * z + z / 4); } }
private void InitializeMap() { #region fill map Assets.Default.stuff.ToBitmapDictionary( f => { const uint graywall = 0xff0000; const uint graywall_achtung = 0xff0001; const uint graywall_verboten = 0xff0002; const uint woodwall = 0x7F3300; const uint woodwall_books = 0x7F33F0; const uint woodwall_achtung = 0x7F3301; const uint woodwall_verboten = 0x7F3302; const uint bluewall = 0x0000ff; const uint greenwall = 0x00ff00; var Map = new Texture32(); #region safe map for (int i = 0; i < 32; i++) for (int j = 0; j < 32; j++) { Map[i, j] = bluewall; } #endregion maze = new BlockMaze(new MazeGenerator(MazeSize, MazeSize, null)); #region write walls to map var wall_counter = 0; for (int x = 1; x < maze.Width - 1; x++) for (int y = 1; y < maze.Height - 1; y++) { if (maze.Walls[x][y]) { wall_counter++; var variant = graywall; if (y > maze.Height / 2) { variant = woodwall; if (wall_counter % 7 == 0) variant = woodwall_books; if (wall_counter % 11 == 0) variant = woodwall_achtung; else if (wall_counter % 13 == 0) variant = woodwall_verboten; } else { variant = graywall; if (wall_counter % 8 == 0) variant = graywall_achtung; else if (wall_counter % 9 == 0) variant = graywall_verboten; } Map[x, y] = variant; } else Map[x, y] = 0; } #endregion #region maze is smaller than 31 for (int x = 1; x < maze.Width - 1; x++) { Map[x, maze.Height - 1] = greenwall; } for (int y = 1; y < maze.Height - 1; y++) { Map[maze.Width - 1, y] = greenwall; } #endregion EgoView.Map.WorldMap = Map; Action<IEnumerator<Texture64.Entry>, Texture64, Action<SpriteInfoExtended>> AddSpriteByTexture = (SpaceForStuff, tex, handler) => { var p = SpaceForStuff.TakeOrDefault(); if (p == null) return; CreateDummy(tex).Do(handler).Position.To(p.XIndex + 0.5, p.YIndex + 0.5); }; var FreeSpaceForStuff = EgoView.Map.WorldMap.Entries.Where(i => i.Value == 0).Randomize().GetEnumerator(); CreateGuards(FreeSpaceForStuff); var GoldTakenCounter = 0; #region gold var GoldSprites = new List<SpriteInfo>(); #region nonblock Action AddNonBlockingItems = delegate { Assets.Default.nonblock.ToBitmapArray( sprites => { for (int i = 0; i < 7; i++) foreach (var s in sprites) { // compiler bug: get a delegate to BCL class //AddSpriteByTexture(FreeSpaceForStuff, s, GoldSprites.Add); AddSpriteByTexture(FreeSpaceForStuff, s, k => { k.Range = 0.5; //GoldSprites.Add(k); } ); } } ); }; #endregion Assets.Default.gold.ToBitmapArray( sprites => { for (int i = 0; i < 6; i++) foreach (var _s in sprites) { var s = _s; // compiler bug: get a delegate to BCL class //AddSpriteByTexture(FreeSpaceForStuff, s, GoldSprites.Add); AddSpriteByTexture(FreeSpaceForStuff, s, k => { k.Range = 0.5; k.ItemTaken += delegate { Assets.Default.treasure.play(); }; GoldSprites.Add(k); } ); } var LastPosition = new Point(); EgoView.ViewPositionChanged += delegate { // only check for items each 0.5 distance travelled if ((EgoView.ViewPosition - LastPosition).length < 0.5) return; Action Later = null; Action ItemTaken = null; foreach (var Item in EgoView.SpritesFromPointOfView) { var Item_Sprite = Item.Sprite as SpriteInfoExtended; if (Item_Sprite != null) if (!Item_Sprite.IsTaken) if (Item.Distance < Item_Sprite.Range) { if (GoldSprites.Contains(Item_Sprite)) { // ding-ding-ding! Item_Sprite.IsTaken = true; new Bitmap(new BitmapData(DefaultWidth, DefaultHeight, false, 0xffff00)) { scaleX = DefaultScale, scaleY = DefaultScale }.AttachTo(this).FadeOutAndOrphanize(1000 / 24, 0.2); if (Item_Sprite != null) if (Item_Sprite.ItemTaken != null) ItemTaken += () => Item_Sprite.ItemTaken(); GoldTakenCounter = (GoldTakenCounter + 1).Min(1); Later += delegate { EgoView.Sprites.Remove(Item_Sprite); GoldSprites.Remove(Item_Sprite); }; } } } if (Later != null) Later(); LastPosition = EgoView.ViewPosition; if (ItemTaken != null) ItemTaken(); }; AddNonBlockingItems(); } ); #endregion Func<string, Texture64> t = texname => f[texname + ".png"]; Func<string, string, Texture64> mix = (a, b) => { var ia = f[a + ".png"]; var ib = f[b + ".png"]; var u = new Bitmap(ia.bitmapData.clone()); u.bitmapData.draw(ib); return u; }; #region game goal TheGoldStack = CreateDummy(f["life.png"]); TheGoldStack.Position.To(maze.Width - 1.5, maze.Height - 1.5); TheGoldStack.Range = 0.5; TheGoldStack.ItemTaken += delegate { if (EndLevelMode) return; // show stats EnterEndLevelMode(); }; GoldSprites.Add(TheGoldStack); #endregion EgoView.Map.Textures = new Dictionary<uint, Texture64> { {graywall_achtung, mix("graywall", "achtung")}, {graywall_verboten, mix("graywall", "verboten")}, {graywall, t("graywall")}, {woodwall_achtung, mix("woodwall", "achtung")}, {woodwall_verboten, mix("woodwall", "verboten")}, {woodwall, t("woodwall")}, {woodwall_books, t("woodwall_books")}, {bluewall, t("bluewall")}, {greenwall, t("greenwall")}, }; // EgoView.RenderScene(); #region hand var hand = f["hand.png"]; const int handsize = 4; var hand_x = (DefaultControlWidth - hand.width * handsize) / 2; var hand_y = DefaultControlHeight - hand.height * handsize; hand.x = hand_x; hand.y = hand_y; hand.scaleX = handsize; hand.scaleY = handsize; hand.AttachTo(HudContainer); (1000 / 24).AtInterval( tt => { hand.x = hand_x + Math.Cos(tt.currentCount * 0.2) * 6; hand.y = hand_y + Math.Abs(Math.Sin(tt.currentCount * 0.2)) * 4; } ); #endregion #region heads Assets.Default.head.Items.OrderBy(k => k.FileName).Select(k => k.Data).ToImages( heads => { var head = default(Bitmap); 1000.AtInterval( tt => { if (head != null) head.Orphanize(); if (heads.Length > 0) { if (GoldTakenCounter > 0) { GoldTakenCounter--; head = heads.Last(); } else head = heads.AtModulus(tt.currentCount % 3); head.filters = new[] { new DropShadowFilter() }; head.scaleX = 2; head.scaleY = 2; head.MoveTo(4, DefaultControlHeight - head.height - 4).AttachTo(HudContainer); } } ); } ); #endregion InitializeCompass(); InitializeKeyboard(); AttachMovementInput(EgoView, true, false); ResetEgoPosition(); stage.enterFrame += e => { //if (EndLevelMode) // return; EgoView.RenderScene(); }; //getpsyched.FadeOutAndOrphanize(1000 / 15, 0.1); this.EgoView.Image.FadeIn( delegate { //1500.AtDelayDo( // delegate // { // this.HudContainer.FadeIn(); // } //); } ); } ); #endregion }
public static void Main(string[] args) { // jsc needs to see args to make Main into main for javac.. // generic parameter needs to be moved.. //enumerable_10 = __Enumerable.AsEnumerable(__SZArrayEnumerator_1<String>.Of(stringArray3)); Console.WriteLine("hi!"); Console.WriteLine("maze..."); var maze = new MazeGenerator(20, 20, new Feedback()); var w = new BlockMaze(maze); for (int iy = 0; iy < w.Height; iy += 2) { for (int i = 0; i < w.Width; i++) { var v0 = w.Walls[i][iy]; var v1 = false; if (iy + 1 < w.Height) v1 = w.Walls[i][iy + 1]; //Console.Write("" + v.ToString("x2")); if (v0) { if (v1) Console.Write("█"); else Console.Write("▀"); } else { if (v1) Console.Write("▄"); else Console.Write(" "); } } Console.WriteLine(); } System.Console.WriteLine("done"); System.Console.WriteLine("jvm"); CLRProgram.XML = new XElement("hello", "world"); CLRProgram.CLRMain( ); }