1 const int N = 8; 2 Button button = new Button(); 3 Image[] images = new Image[N]; 4 PictureBox[] pictures = new PictureBox[N]; 5 int[] dx = new int[N] { 112, 112, 0, 0, -113, -113, 0, 0 }; 6 int[] dy = new int[N] { 0, 0, 113, 113, 0, 0, -112, -112 }; 7 private void Form1_Load(object sender, EventArgs e) 8 { 9 InitialImage();10 InitialSurface();//初始化窗体界面11 }12 //添加图片13 private void InitialImage()14 {15 images[0] = Resources.保温杯;16 images[1] = Resources.体重秤;17 images[2] = Resources.x1;18 images[3] = Resources.台灯;19 images[4] = Resources.耳机;20 images[5] = Resources.x2;21 images[6] = Resources.电动牙刷;22 images[7] = Resources.时钟;23 this.BackgroundImage = Resources.formbg3;24 }25 //初始化界面26 private void InitialSurface()27 {28 this.Size = new Size(537, 760);29 Panel pa = new Panel();30 pa.Size = new System.Drawing.Size(342, 348);31 pa.BackgroundImage = Resources.bga1;32 pa.BackgroundImageLayout = ImageLayout.Stretch;33 pa.Location = new Point((int)(this.Width * 0.17), (int)(this.Height * 0.418));//90, 315);34 pa.BackColor = Color.Transparent;35 this.Controls.Add(pa);36 int x = 11, y = 11;37 for (int i = 0; i < N; i++)38 {39 x += dx[i];40 y += dy[i];41 PictureBox box = new PictureBox();42 box.Size = new Size(95, 95);43 box.Location = new Point(x, y);44 box.Image = images[i];45 box.SizeMode = PictureBoxSizeMode.StretchImage;46 box.BorderStyle = BorderStyle.FixedSingle;47 box.Padding = new Padding(4);48 box.BackColor = Color.White;49 pictures[i] = box;50 pa.Controls.Add(box);51 }52 button.Text = "开始" + "\r\n" + "抽奖";53 button.Font = new Font("宋体", 14, FontStyle.Bold);54 button.Size = new Size(97, 97);55 button.Location = new Point((int)(pa.Width * 0.36), (int)(pa.Height * 0.36));//123, 124);56 button.Click += Button_Click;57 pa.Controls.Add(button);58 59 PictureBox box0 = new PictureBox();60 box0.Location = new Point(0, 0);61 box0.Image = Resources.抽奖;62 box0.SizeMode = PictureBoxSizeMode.StretchImage;63 box0.Size = new Size(this.Width, (int)(this.Height * 0.30));//220);64 box0.BorderStyle = BorderStyle.None;65 this.Controls.Add(box0);66 67 PictureBox box1 = new PictureBox();68 box1.Image = Resources.bgGIF;69 box1.SizeMode = PictureBoxSizeMode.StretchImage;70 box1.BorderStyle = BorderStyle.None;71 box1.Size = new Size(395, 400);72 box1.Location = new Point((int)(this.Width * 0.12), (int)(this.Height * 0.38));//64, 290);73 74 75 76 Label probability = new Label();77 probability.BackColor = Color.Transparent;78 probability.Size = new System.Drawing.Size(500,20);79 probability.Text = "奖品概率: 保温杯7% 电动牙刷7% 体重秤4% 时钟4% 台灯3% 耳机3% ";80 probability.Font = new System.Drawing.Font("宋体", 10, FontStyle.Regular);81 probability.Location = new Point((int)(this.Width * 0.10), (int)(this.Height * 0.30));82 this.Controls.Add(probability);83 this.Controls.Add(box1);84 this.MaximizeBox = false;85 this.BackgroundImageLayout = ImageLayout.None;86 this.AutoSizeMode = AutoSizeMode.GrowAndShrink;87 }
初始化代码
界面效果如下:
实现旋转是使用的改变控件大小,背景颜色(把padding设置4可以看见背景颜色)。
1 Random random = new Random(); 2 SoundPlayer sp = new SoundPlayer(Resources.Untitled_Project); 3 int circle; 4 int index; 5 int stopNum; 6 bool flag = true;//奇数和偶数的标志,为true表示偶数 7 private void Button_Click(object sender, EventArgs e) 8 { 9 circle = random.Next(5, 8);//随机产生旋转的圈数10 stopNum = random.Next(0, 8);//随机确定选择抽中奖品的下标11 button.Enabled = false;12 time.Interval = 10;13 index = 0;14 flag = true;15 sp.Play();16 time.Start();17 }18 19 private void time_Tick(object sender, EventArgs e)20 {21 if (flag)//放大picturebox,实现转动效果22 {23 pictures[index].Size = new Size(103, 103);24 pictures[index].BackColor = Color.YellowGreen;25 flag = false;26 }27 else if (flag == false)//将原来的picturebox缩放回原来的尺寸28 {29 pictures[index].Size = new Size(95, 95);30 pictures[index].BackColor = Color.White;31 index++;32 flag = true;33 }34 if (index == 8)35 {36 index = 0;37 circle -= circle > 0 ? 1 : 0;//每次转动8次,旋转的圈数-138 }39 //倒数两圈慢40 time.Interval = circle > 2 ? 10 : 100;41 if (circle == 0 && index == stopNum)42 {43 pictures[index].Size = new Size(103, 103);44 pictures[index].BackColor = Color.YellowGreen;45 pictures[index].Location = new Point(pictures[index].Location.X - 4, pictures[index].Location.Y - 4);46 StopRotate(index);47 pictures[index].Size = new Size(95, 95);48 pictures[index].BackColor = Color.White;49 pictures[index].Location = new Point(pictures[index].Location.X + 4, pictures[index].Location.Y + 4);50 }51 }
旋转代码
停止再加上一个简单的概率会有点不了不流畅。
1 private void StopRotate(int sum) 2 { 3 string message = null; 4 switch (index) 5 { 6 case 0: if (random.Next(0, 2) == stopNum) message = "恭喜获取保温杯一个"; else { circle = 1; stopNum = 2; } break;//1/2 14 7% 7 case 1: if (random.Next(0, 3) == stopNum) message = "恭喜获取体重秤一个"; else { circle = 1; stopNum = 5; } break;//1/3 21 4% 8 case 2: message = "谢谢惠顾"; break; 9 case 3: if (random.Next(3, 7) == stopNum) message = "恭喜获取台灯一个"; else { circle = 1; stopNum = 5; } break;//1/4 28 3%10 case 4: if (random.Next(0, 5) == stopNum) message = "恭喜获取耳机一个"; else { circle = 1; stopNum = 5; } break;//1/4 28 3%11 case 5: message = "谢谢惠顾"; break;12 case 6: if (random.Next(6, 8) == stopNum) message = "恭喜获取电动牙刷一个"; else { circle = 1; stopNum = 2; } break;//1/2 1/14 7&13 case 7: if (random.Next(7, 10) == stopNum) message = "恭喜获取时钟一个"; else { circle = 1; stopNum = 2; } break;//1/3 1/21 4%14 }15 if (message != null)16 {17 sp.Stop();18 time.Stop();//先关闭定时器19 MessageBox.Show(message);20 this.button.Enabled = true;21 }22 }
停止代码
简单的旋转程序就完成了。