ئېلان قوبۇل قىلىش تېلېفونى: 13999061557
كۆرۈش: 1169|ئىنكاس: 5
ئوڭ تەرىپنى يىغىش

C# تىلىدا رەسىم قوراشتۇرۇش ئويۇنى

18

تېما

50

يازما

1197

تەجرىبە

ئالىي ئەزا

Rank: 4

نادىر
0
جۇغلانما
2819
ئاقچا
16

تۆھپە ئوردېنى

مەشىق ئورنىدا، C# تىلى بىلەن ئاددىي قىلىپ رەسىم قوراشتۇرۇش ئويۇنى ياساپ باقتىم. پىروگراممىغا قىززىققۇچىلار بىلەن پىكىر ئالماشتۇرۇش مەقسىتىدە دېتالنىڭ ئەسلى كودى ۋە ئىجرا پىروگراممىسىنى كۆپچىلىك بىلەن ئورتاقلاشماقچىمەن. ئاۋۋال دېتالنىڭ كۆرۈنمە يۈزىنى كۆرۈپ باقايلى:
PicturePiece1.png

PicturePiece2.png

دېتال ھەققىدە ئىخچام چۈشەنچە

ئويۇننىڭ ماھيىتى تولىمۇ ئاددىي: خالىغان رەسىمنى تاللاپ ئاچقاندىن كېيىن، بەلگىلىگەن قېيىنلىق دەرىجىسى بويىچە رەسىمنى پارچىلاپ، پارچىلارنىڭ ئورۇنلىرىنى ئىختىيارىي تەرتىپتە ئورۇنلاشتۇرۇپ بېرىدۇ. ئاندىن دېتال تەگلىكىدە شەكىللەنگەن ماس چوڭلۇقتىكى كاتەكلەرگە مۇناسىپ رەسىم پارچىلىرىنى تارتىپ قويىمىز، ئورنى توغرا بولغاندا رەسىم پارچىسى شۇ كاتەكچىگە قۇلۇبلىنىدۇ ۋە گىرۋىكى ئاق رەڭگە ئۆزگىرىدۇ. پارچىلارنىڭ ئورنىنى بىر - بىرلەپ يۆتكەپ، تاكى ئەسلى رەسىم قوراشتۇرۇلغاندا ئويۇن ئاياغلىشىدۇ.

دېتال ئۇچۇرلىرى

نامى: PicturePiece1.0 - رەسىم قوراشتۇرۇش 1.0
يېزىلغان تىل: C# تىلى
پۈتكەن ۋاقتى: 2015 - يىلى 02 - ئاينىڭ 01 - كۈنى

دېتال كودلىرى

ئاۋۋال ئاددىي قىلىپ Peice.cs نامىدا بىر تۈر قۇرۇۋالدىم. بۇ تۈر ئىچىدە پارچىلارنىڭ ئورنىنى بەلگىلەش ۋە ھۆكۈم قىلىشقا دائىر ئۇسسۇللارنى يېزىۋالدىم. كودلىرى تۆۋەندىكىدەك:
  1. class Peice
  2.     {
  3.         public Bitmap Picture;
  4.         public Rectangle HomeLocation, CurrentLocation;
  5.         public Peice(Bitmap new_picture, Rectangle home_location)
  6.         {
  7.             Picture = new_picture;
  8.             HomeLocation = home_location;
  9.         }
  10.         public bool IsHome()
  11.         {
  12.             return HomeLocation.Equals(CurrentLocation);
  13.         }
  14.         public bool Contains(Point pt)
  15.         {
  16.             return CurrentLocation.Contains(pt);
  17.         }
  18.         public bool SnapToHome()
  19.         {
  20.             if((Math.Abs(CurrentLocation.X-HomeLocation.X)<20)&&
  21.                 (Math.Abs(CurrentLocation.Y-HomeLocation.Y)<20))
  22.             {
  23.                 CurrentLocation = HomeLocation;
  24.                 return true;
  25.             }
  26.             return false;
  27.         }


  28.     }
مەزمۇننى كۆچۈرۈۋېلىش

ئاندىن Form قىسمىدا يۇقىرىقى تۈرنى ئىشلىتىش ۋە بىر قىسىم ئۇسسۇللارنى ئەمەلگە ئاشۇرۇش ئارقىلىق دېتالنىڭ ئاساسىي ئىقتىدارلىرى ھازىرلاندى. كودلىرى تۆۋەندىكىدەك:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;

  10. namespace PicturePeice
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         //nowettiki toluq resim
  19.         private Bitmap FullPicture = null;
  20.         //doska tegliki
  21.         private Bitmap Background = null;
  22.         //Doska
  23.         private Bitmap Board = null;
  24.         // parchilar
  25.         private List Peices = null;
  26.         // Parhilarning chongluqi (sukutte asan halet)
  27.         private int TargetSize = 100;
  28.         // Parchilarni qoyudighan katekchilerning sani we chongluqi
  29.         private int NumRows, NumCols, RowHgt, ColWid;
  30.         // ishletkuchi tartip yotkewatqan parche
  31.         private Peice MovingPeice = null;
  32.         private Point MovingPoint;
  33.         // oyun ayaghlashqanda
  34.         private bool GameOver = true;
  35.         // Chekinish
  36.         private void Exit_ToolStripMenuItem1_Click(object sender, EventArgs e)
  37.         {
  38.             this.Close();
  39.         }

  40.         private void Open_ToolStripMenuItem_Click(object sender, EventArgs e)
  41.         {
  42.             if (ofdPicture.ShowDialog() == DialogResult.OK)
  43.             {
  44.                 LoadPicture(ofdPicture.FileName);
  45.             }
  46.         }
  47.         // Resimni yuklesh
  48.         private void LoadPicture(string filename)
  49.         {
  50.             try
  51.             {
  52.                 // Tallighan resimni yukleymiz
  53.                 using (Bitmap bm = new Bitmap(ofdPicture.FileName))
  54.                 {
  55.                     FullPicture = new Bitmap(bm.Width, bm.Height);
  56.                     using (Graphics gr = Graphics.FromImage(FullPicture))
  57.                     {
  58.                         gr.DrawImage(bm, 0, 0, bm.Width, bm.Height);
  59.                     }
  60.                 }
  61.                 // Doska we tegliki
  62.                 Background = new Bitmap(FullPicture.Width, FullPicture.Height);
  63.                 Board = new Bitmap(FullPicture.Width, FullPicture.Height);
  64.                 picPuzzle.Size = FullPicture.Size;
  65.                 picPuzzle.Image = Board;
  66.                 this.ClientSize = new Size(picPuzzle.Right + picPuzzle.Left, picPuzzle.Bottom + picPuzzle.Left);
  67.                 //Yengi oyunni bashlash
  68.                 StartGame();

  69.             }
  70.             catch (Exception ex)
  71.             {
  72.                 MessageBox.Show(ex.Message);
  73.             }
  74.         }
  75.         // Yengi oyunni bashlash
  76.         private void StartGame()
  77.         {
  78.             if (FullPicture == null) return;
  79.             GameOver = false;
  80.             // Herbir parchining chongluqini hisablash
  81.             NumRows = FullPicture.Height / TargetSize;
  82.             RowHgt = FullPicture.Height / NumRows;
  83.             NumCols = FullPicture.Width / TargetSize;
  84.             ColWid = FullPicture.Width / NumCols;
  85.             // Yukligen resimni parchilargha aylandurush
  86.             Random rand = new Random();
  87.             Peices = new List();
  88.             for (int row = 0; row < NumRows; row++)
  89.             {
  90.                 int hgt = RowHgt;
  91.                 if (row == NumRows - 1) hgt = FullPicture.Height - row * RowHgt;
  92.                 for (int col = 0; col < NumCols; col++)
  93.                 {
  94.                     int wid = ColWid;
  95.                     if (col == NumCols - 1) wid = FullPicture.Width - col * ColWid;
  96.                     Rectangle rect = new Rectangle(col * ColWid, row * RowHgt, wid, hgt);
  97.                     Peice new_peice = new Peice(FullPicture, rect);
  98.                     // parchilarning deslepki ornini ixtiyariy belgilesh
  99.                     new_peice.CurrentLocation = new Rectangle(
  100.                         rand.Next(0,FullPicture.Width-wid),rand.Next(0,FullPicture.Height-hgt),wid,hgt
  101.                         );
  102.                     Peices.Add(new_peice);
  103.                 }
  104.             }
  105.             //Teglik sizish
  106.             MakeBackground();
  107.             // Doskini hasillash
  108.             DrawBoard();
  109.         }

  110.         private void DrawBoard()
  111.         {
  112.             using (Graphics gr = Graphics.FromImage(Board))
  113.             {
  114.                 // Teglikni qayta tertiplesh
  115.                 gr.DrawImage(Background, 0, 0, Background.Width, Background.Height);
  116.                 // Yotkewatqan parchilarni sizish
  117.                 if (MovingPeice != null)
  118.                 {
  119.                     gr.DrawImage(FullPicture, MovingPeice.CurrentLocation, MovingPeice.HomeLocation, GraphicsUnit.Pixel);
  120.                     using (Pen blue_pen = new Pen(Color.Blue, 4))
  121.                     {
  122.                         gr.DrawRectangle(blue_pen, MovingPeice.CurrentLocation);
  123.                     }
  124.                 }
  125.             }
  126.             picPuzzle.Visible = true;
  127.             picPuzzle.Refresh();
  128.         }
  129.         // Yotkeshke bolidighan parchilar yoq waqittiki teglik
  130.         private void MakeBackground()
  131.         {
  132.             using (Graphics gr = Graphics.FromImage(Background))
  133.             {
  134.                 MakeBackgroundOnGraphics(gr);
  135.             }
  136.         }
  137.         // Dayirige mashlashturush
  138.         private void MakeBackground(Rectangle rect)
  139.         {
  140.             using (Graphics gr = Graphics.FromImage(Background))
  141.             {
  142.                 gr.SetClip(rect);
  143.                 MakeBackgroundOnGraphics(gr);
  144.             }
  145.         }
  146.         private void MakeBackgroundOnGraphics(Graphics gr)
  147.         {
  148.             // Tazlash
  149.             gr.Clear(picPuzzle.BackColor);
  150.             // Teglik ustige katekche sizish
  151.             DrawGrid(gr);
  152.             //Parchilarn sizish
  153.             DrawPeices(gr);
  154.             picPuzzle.Visible = true;
  155.             picPuzzle.Refresh();
  156.         }

  157.         private void DrawPeices(Graphics gr)
  158.         {
  159.             using (Pen white_pen = new Pen(Color.White, 3))
  160.             {
  161.                 using (Pen black_pen = new Pen(Color.Black, 3))
  162.                 {
  163.                     foreach (Peice peice in Peices)
  164.                     {
  165.                         // Yotkewatqan parchini sizmaymiz
  166.                         if (peice != MovingPeice)
  167.                         {
  168.                             gr.DrawImage(FullPicture, peice.CurrentLocation, peice.HomeLocation, GraphicsUnit.Pixel);
  169.                             if (!GameOver)
  170.                             {
  171.                                 if (peice.IsHome())
  172.                                 {
  173.                                     // qoyulghan parchining girwikini aq rengge almashturimiz
  174.                                     gr.DrawRectangle(white_pen, peice.CurrentLocation);
  175.                                 }
  176.                                 else
  177.                                 {
  178.                                     // qoyulghan parchining girwikini qara rengge almashturimiz
  179.                                     gr.DrawRectangle(black_pen, peice.CurrentLocation);
  180.                                 }
  181.                             }
  182.                         }
  183.                     }
  184.                 }
  185.             }
  186.         }
  187.         // Teglik ustige katekche sizish
  188.         private void DrawGrid(Graphics gr)
  189.         {
  190.             using (Pen thick_pen = new Pen(Color.DarkGray, 4))
  191.             {
  192.                 for (int y = 0; y <= FullPicture.Height; y += RowHgt)
  193.                 {
  194.                     gr.DrawLine(thick_pen, 0, y, FullPicture.Width, y);
  195.                 }
  196.                 gr.DrawLine(thick_pen, 0, FullPicture.Height, FullPicture.Width, FullPicture.Height);

  197.                 for (int x = 0; x <= FullPicture.Width; x += ColWid)
  198.                 {
  199.                     gr.DrawLine(thick_pen, x, 0, x, FullPicture.Height);
  200.                 }
  201.                 gr.DrawLine(thick_pen, FullPicture.Width, 0, FullPicture.Width, FullPicture.Height);
  202.             }
  203.         }
  204.         //Parchilar bolmighan chaghdiki teglikni muqumlashturush
  205.         private void RemoveMovingPeiceFromBackground()
  206.         {
  207.             if (MovingPeice == null) return;
  208.             using (Graphics gr = Graphics.FromImage(Background))
  209.             {
  210.                 gr.SetClip(MovingPeice.CurrentLocation);
  211.                 // Bu dayirige ramka sizish
  212.                 DrawGrid(gr);
  213.                 // Parchilarni sizish
  214.                 DrawPeices(gr);
  215.             }
  216.             picPuzzle.Visible = true;
  217.             picPuzzle.Refresh();
  218.         }

  219.         private void picPuzzle_MouseDown(object sender, MouseEventArgs e)
  220.         {
  221.             
  222.             MovingPeice = null;
  223.             foreach (Peice peice in Peices)
  224.             {
  225.                 if (!peice.IsHome() && peice.Contains(e.Location))
  226.                     MovingPeice = peice;
  227.             }
  228.             if (MovingPeice == null) return;

  229.             // Bu orunni saqlash
  230.             MovingPoint = e.Location;

  231.             // Move it to the top of the stack.
  232.             Peices.Remove(MovingPeice);
  233.             Peices.Add(MovingPeice);

  234.             // yotkiliwatqan parchilarning teglikini qayta sizish
  235.             Rectangle rect = MovingPeice.CurrentLocation;
  236.             rect.Inflate(4, 4);
  237.             MakeBackground(rect);
  238.             DrawBoard();
  239.         }

  240.         private void picPuzzle_MouseMove(object sender, MouseEventArgs e)
  241.         {
  242.             if (MovingPeice == null) return;
  243.             // parchilarni yotkesh
  244.             int dx = e.X - MovingPoint.X;
  245.             int dy = e.Y - MovingPoint.Y;
  246.             MovingPeice.CurrentLocation.X += dx;
  247.             MovingPeice.CurrentLocation.Y += dy;
  248.             // yengi mawus ornini saqlash
  249.             MovingPoint = e.Location;
  250.             // qayta sizish
  251.             DrawBoard();
  252.         }

  253.         private void picPuzzle_MouseUp(object sender, MouseEventArgs e)
  254.         {
  255.             if (MovingPeice == null) return;
  256.             // parchilar toghra ornidimu yoq?
  257.             if (MovingPeice.SnapToHome())
  258.             {
  259.                 Peices.Remove(MovingPeice);
  260.                 Peices.Reverse();
  261.                 Peices.Add(MovingPeice);
  262.                 Peices.Reverse();
  263.                 // oyun ayaghlashtim yoq?
  264.                 GameOver = true;
  265.                 foreach (Peice peice in Peices)
  266.                 {
  267.                     if (!peice.IsHome())
  268.                     {
  269.                         GameOver = false;
  270.                         break;
  271.                     }
  272.                 }
  273.             }
  274.             // yotkleme parchilarning ornini elish
  275.             Rectangle rect = MovingPeice.CurrentLocation;
  276.             rect.Inflate(4, 4);
  277.             //parchini yotkeshni toxtitish
  278.             MovingPeice = null;
  279.             // yotkelgen parche teglikini qayta sisizish
  280.             if (GameOver)
  281.             {
  282.                 MakeBackground();
  283.             }
  284.             else
  285.             {
  286.                 MakeBackground(rect);
  287.             }
  288.             DrawBoard();
  289.         }
  290.         private void mnuOptionsLevel_Click(object sender, EventArgs e)
  291.         {
  292.             // Tallanghan yaki tallanmighan tizimlik
  293.             ToolStripMenuItem mnu = sender as ToolStripMenuItem;
  294.             Easy_F5ToolStripMenuItem.Checked = (mnu == Easy_F5ToolStripMenuItem);
  295.             Medimum_F6ToolStripMenuItem.Checked = (mnu == Medimum_F6ToolStripMenuItem);
  296.             Hard_F7ToolStripMenuItem.Checked = (mnu == Hard_F7ToolStripMenuItem);

  297.             // Tallanghan qeyinliq derijisini elish
  298.             TargetSize = int.Parse((string)mnu.Tag);

  299.             // Yengi oyunni bashlash
  300.             StartGame();
  301.         }
  302.         
  303.     }
  304. }
مەزمۇننى كۆچۈرۈۋېلىش

شۇنىڭلىق بىلەن مەزكۇر دېتال پۈتتى. كود قىسمىغا زۆرۈر بولغان ئىزاھاتلار قوشۇلدى.

كېيىنكى نەشرىگە قوشۇلىدىغان ئىقتىدارلار

1. نومۇر ھېسابلاش ئىقتىدارى قوشۇلۇپ، رەسىمنىڭ قوراشتۇرۇلۇش ئەھۋالى، كەتكەن ۋاقىت، پارچىلارنى يۆتكىگەن قەدەم باسقۇچ بويىچە ئوينىغۇچىغا نومۇر ھېسابلاپ بېرىدىغان قىلىش.
2. ئويۇننىڭ قېيىنلىق دەرىجىسىگە ئاساسەن مۇۋاپىق ساندا ئەسكەرتىش ئىقتىدارى سەپلەش.
3. دېتالنىڭ كۆرۈنمە يۈزىگە قايتىدىن ئىشلەش.

دېتالنى چۈشۈرۈش ۋە سىناش

دېتالنى چۈشۈرۈپ PicturePeice.exe نى ئىجرا قىلىپ سىناپ باقسىڭىز بولىدۇ.
چۈشۈرۈش: ResimQorashturush.zip (27.76 KB, چۈشۈرۈش سانى: 100)

باھالاش

قاتناشقانلار سانى 1تەجرىبە +50 يىغىش سەۋەبى
Sabirjan + 50 مەن قوللايمەن

باھا خاتىرىسى

1

تېما

37

يازما

128

تەجرىبە

ئاكتىپ ئەزا

Rank: 3Rank: 3

نادىر
0
جۇغلانما
349
ئاقچا
0
tagogli007 ۋاقتى: 2015-2-6 15:20:33 | ھەممە قەۋەتنى كۆرۈش

0

تېما

30

يازما

24

تەجرىبە

تىرىشچان ئەزا

Rank: 2

نادىر
0
جۇغلانما
109
ئاقچا
0
ئېسكى ۋاقتى: 2015-2-6 17:49:12 | ھەممە قەۋەتنى كۆرۈش

0

تېما

25

يازما

25

تەجرىبە

تىرىشچان ئەزا

Rank: 2

نادىر
0
جۇغلانما
99
ئاقچا
0
1yawabora ۋاقتى: 2015-2-7 00:56:34 | ھەممە قەۋەتنى كۆرۈش
ئەسسالامۇئەلەيكۇم  ھازىر ھىچنىمىنى چۈشۈرگىلى بولمايدغان بوپ قالدى  ئالىپكامغا نىمە بولدى
ئالپ يانفون تېرمىنالىدا يېزىلغانئالپ يانفون تېرمىنالىدا يېزىلغان

27

تېما

95

يازما

908

تەجرىبە

ئالىي ئەزا

Rank: 4

نادىر
0
جۇغلانما
2053
ئاقچا
1
tormahiri ۋاقتى: 2015-2-7 11:55:09 | ھەممە قەۋەتنى كۆرۈش
سىز گە بىر تەكلىپ پىروگىراممىدا خىلى ياخشى ئوخشايسىز،شۇ ڭا بۇنىڭ داۋامىنى قىلىپ قالسىڭىز github.com دىن ئاككونت ئىلىپ شۇيەرگە ئوچۇق مەنبەلىك قىلىپ يوللاپ قويۇڭ،ھازىر دىيارىمىزدا ئاز بولمىغان قىرىنداشلارىمىز ۋە بىرقىسىم ئۇيغۇر تېخنىكا شىركەتلىرى ئوچۇق مەنبەلىك قىلىشقا يۈزلىنىۋاتىدۇ...!

18

تېما

50

يازما

1197

تەجرىبە

ئالىي ئەزا

Rank: 4

نادىر
0
جۇغلانما
2819
ئاقچا
16

تۆھپە ئوردېنى

s41157018  ئىگىسى| ۋاقتى: 2015-2-7 13:03:09 | ھەممە قەۋەتنى كۆرۈش
tormahiri يوللىغان ۋاقتى  2015-2-7 11:55
سىز گە بىر تەكلىپ پىروگىراممىدا خىلى ياخشى ئوخشايسىز، ...

تەكلىۋېڭىزگە رەھمەت! بۇنى Github قا قويغان، ماۋۇ تېمىدا ئادرىسىنى قالدۇرۇشنى ئۇنتۇپتىمەن: https://github.com/teshna01/PicturePiece
  تەنقىد، تەكلىپلىرىڭىزنى ئايىمىغايسىز!
كىرگەندىن كېيىن ئىنكاس يازالايسىز كىرىش | ئەزا بولۇش

سەھىپە جۇغلانما قائىدىسى

تېما يوللاش ئالدىنقى تېما كېيىنكى تېما تېز ئىنكاس تۈرگە قايتىش 这是一个自定义按钮
تېز ئىنكاس چوققىغا قايتىش سەھىپىگە قايتىش