表1. CheckerDrag.java
十余年的临武网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整临武建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“临武网站设计”,“临武网站推广”以来,每个客户项目都认真落实执行。
// CheckerDrag.javaimport java.awt.*;import java.awt.event.*;public class CheckerDrag extends java.applet.Applet{ // Dimension of checkerboard square. // 棋盘上每个小方格的尺寸 final static int SQUAREDIM = 40; // Dimension of checkerboard -- includes black outline. // 棋盘的尺寸 – 包括黑色的轮廓线 final static int BOARDDIM = 8 * SQUAREDIM + 2; // Dimension of checker -- 3/4 the dimension of a square. // 棋子的尺寸 – 方格尺寸的3/4 final static int CHECKERDIM = 3 * SQUAREDIM / 4; // Square colors are dark green or white. // 方格的颜色为深绿色或者白色 final static Color darkGreen = new Color (0, 128, 0); // Dragging flag -- set to true when user presses mouse button over checker // and cleared to false when user releases mouse button. // 拖动标记 --当用户在棋子上按下鼠标按键时设为true, // 释放鼠标按键时设为false boolean inDrag = false; // Left coordinate of checkerboard's upper-left corner. // 棋盘左上角的左方向坐标 int boardx; // Top coordinate of checkerboard's upper-left corner. //棋盘左上角的上方向坐标 int boardy; // Left coordinate of checker rectangle origin (upper-left corner). // 棋子矩形原点(左上角)的左方向坐标 int ox; // Top coordinate of checker rectangle origin (upper-left corner). // 棋子矩形原点(左上角)的上方向坐标 int oy; // Left displacement between mouse coordinates at time of press and checker // rectangle origin. // 在按键时的鼠标坐标与棋子矩形原点之间的左方向位移 int relx; // Top displacement between mouse coordinates at time of press and checker // rectangle origin. // 在按键时的鼠标坐标与棋子矩形原点之间的上方向位移 int rely; // Width of applet drawing area. // applet绘图区域的宽度 int width; // Height of applet drawing area. // applet绘图区域的高度 int height; // Image buffer. // 图像缓冲 Image imBuffer; // Graphics context associated with image buffer. // 图像缓冲相关联的图形背景 Graphics imG; public void init () { // Obtain the size of the applet's drawing area. // 获取applet绘图区域的尺寸 width = getSize ().width; height = getSize ().height; // Create image buffer. // 创建图像缓冲 imBuffer = createImage (width, height); // Retrieve graphics context associated with image buffer. // 取出图像缓冲相关联的图形背景 imG = imBuffer.getGraphics (); // Initialize checkerboard's origin, so that board is centered. // 初始化棋盘的原点,使棋盘在屏幕上居中 boardx = (width - BOARDDIM) / 2 + 1; boardy = (height - BOARDDIM) / 2 + 1; // Initialize checker's rectangle's starting origin so that checker is // centered in the square located in the top row and second column from // the left. // 初始化棋子矩形的起始原点,使得棋子在第一行左数第二列的方格里居中 ox = boardx + SQUAREDIM + (SQUAREDIM - CHECKERDIM) / 2 + 1; oy = boardy + (SQUAREDIM - CHECKERDIM) / 2 + 1; // Attach a mouse listener to the applet. That listener listens for // mouse-button press and mouse-button release events. // 向applet添加一个用来监听鼠标按键的按下和释放事件的鼠标监听器 addMouseListener (new MouseAdapter () { public void mousePressed (MouseEvent e) { // Obtain mouse coordinates at time of press. // 获取按键时的鼠标坐标 int x = e.getX (); int y = e.getY (); // If mouse is over draggable checker at time // of press (i.e., contains (x, y) returns // true), save distance between current mouse // coordinates and draggable checker origin // (which will always be positive) and set drag // flag to true (to indicate drag in progress). // 在按键时如果鼠标位于可拖动的棋子上方 // (也就是contains (x, y)返回true),则保存当前 // 鼠标坐标与棋子的原点之间的距离(始终为正值)并且 // 将拖动标志设为true(用来表明正处在拖动过程中) if (contains (x, y)) { relx = x - ox; rely = y - oy; inDrag = true; } } boolean contains (int x, int y) { // Calculate center of draggable checker. // 计算棋子的中心位置 int cox = ox + CHECKERDIM / 2; int coy = oy + CHECKERDIM / 2; // Return true if (x, y) locates with bounds // of draggable checker. CHECKERDIM / 2 is the // radius. // 如果(x, y)仍处于棋子范围内则返回true // CHECKERDIM / 2为半径 return (cox - x) * (cox - x) + (coy - y) * (coy - y) CHECKERDIM / 2 * CHECKERDIM / 2; } public void mouseReleased (MouseEvent e) { // When mouse is released, clear inDrag (to // indicate no drag in progress) if inDrag is // already set. // 当鼠标按键被释放时,如果inDrag已经为true, // 则将其置为false(用来表明不在拖动过程中) if (inDrag) inDrag = false; } }); // Attach a mouse motion listener to the applet. That listener listens // for mouse drag events. //向applet添加一个用来监听鼠标拖动事件的鼠标运动监听器 addMouseMotionListener (new MouseMotionAdapter () { public void mouseDragged (MouseEvent e) { if (inDrag) { // Calculate draggable checker's new // origin (the upper-left corner of // the checker rectangle). // 计算棋子新的原点(棋子矩形的左上角) int tmpox = e.getX () - relx; int tmpoy = e.getY () - rely; // If the checker is not being moved // (at least partly) off board, // assign the previously calculated // origin (tmpox, tmpoy) as the // permanent origin (ox, oy), and // redraw the display area (with the // draggable checker at the new // coordinates). // 如果棋子(至少是棋子的一部分)没有被 // 移出棋盘,则将之前计算的原点 // (tmpox, tmpoy)赋值给永久性的原点(ox, oy), // 并且刷新显示区域(此时的棋子已经位于新坐标上) if (tmpox boardx tmpoy boardy tmpox + CHECKERDIM boardx + BOARDDIM tmpoy + CHECKERDIM boardy + BOARDDIM) { ox = tmpox; oy = tmpoy; repaint (); } } } }); } public void paint (Graphics g) { // Paint the checkerboard over which the checker will be dragged. // 在棋子将要被拖动的位置上绘制棋盘 paintCheckerBoard (imG, boardx, boardy); // Paint the checker that will be dragged. // 绘制即将被拖动的棋子 paintChecker (imG, ox, oy); // Draw contents of image buffer. // 绘制图像缓冲的内容 g.drawImage (imBuffer, 0, 0, this); } void paintChecker (Graphics g, int x, int y) { // Set checker shadow color. // 设置棋子阴影的颜色 g.setColor (Color.black); // Paint checker shadow. // 绘制棋子的阴影 g.fillOval (x, y, CHECKERDIM, CHECKERDIM); // Set checker color. // 设置棋子颜色 g.setColor (Color.red); // Paint checker. // 绘制棋子 g.fillOval (x, y, CHECKERDIM - CHECKERDIM / 13, CHECKERDIM - CHECKERDIM / 13); } void paintCheckerBoard (Graphics g, int x, int y) { // Paint checkerboard outline. // 绘制棋盘轮廓线 g.setColor (Color.black); g.drawRect (x, y, 8 * SQUAREDIM + 1, 8 * SQUAREDIM + 1); // Paint checkerboard. // 绘制棋盘 for (int row = 0; row 8; row++) { g.setColor (((row 1) != 0) ? darkGreen : Color.white); for (int col = 0; col 8; col++) { g.fillRect (x + 1 + col * SQUAREDIM, y + 1 + row * SQUAREDIM, SQUAREDIM, SQUAREDIM); g.setColor ((g.getColor () == darkGreen) ? Color.white : darkGreen); } } } // The AWT invokes the update() method in response to the repaint() method // calls that are made as a checker is dragged. The default implementation // of this method, which is inherited from the Container class, clears the // applet's drawing area to the background color prior to calling paint(). // This clearing followed by drawing causes flicker. CheckerDrag overrides // update() to prevent the background from being cleared, which eliminates // the flicker. // AWT调用了update()方法来响应拖动棋子时所调用的repaint()方法。该方法从 // Container类继承的默认实现会在调用paint()之前,将applet的绘图区域清除 // 为背景色,这种绘制之后的清除就导致了闪烁。CheckerDrag重写了update()来 // 防止背景被清除,从而消除了闪烁。 public void update (Graphics g) { paint (g); }}
为了帮助网友解决“如何设计一个可以电脑随机抽奖程序?”相关的问题,中国学网通过互联网对“如何设计一个可以电脑随机抽奖程序?”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:如何设计一个可以电脑随机抽奖程序?,具体解决方案如下:
解决方案1:
如果你是对编程一窍不通,又想快速学会做小程序的话,建议学flash+as3。因为flash本来就是动画软件,有简单易懂的界面绘制系统,不像java之类的语言需要用代码来解决界面问题。相对来说,初学者要做小程序,学这个会比较速成。
以下我列举一些你制作这个程序应该要用到的一些基本知识,你搞懂这些大概就可以做出这个程序了。不过,这样速成的学习方法,也会有弊端,我会在下面补充说明。
首先你可以熟悉一下flash的界面。为编程做准备,至少要了解库和属性面板,要了解影片剪辑或按钮。
然后应该学习一下编程的基本知识,比如变量(Variable)、数据类型(Datatype)、方法(Method)的概念,还有if、for等常见语句的用法。你可以把这些当关键词在百度搜索一下(如果直接搜搜不到相关内容,可以多加一个关键词,比如编程或as3之类的,如果中文搜不到就搜英文关键词)。
要了解一下as3的常用语法。比如声明变量、方法的语句。关于这个可以搜一下as3的var和function关键词。
最后,当你对编程有了一个大致的概念之后,你就可以着手准备你的这个小程序。
你可能需要用到的关键方法:
addEventListener() //你最可能用到的事件是MouseEvent.CLICK
Math.random()
Math.round()或Math.floor()或Math.ceil() //这三个都是可以用来数字取整的方法,有细微的不同
addChild()
因为你是初学者,即使是做这么简单的小程序,也有可能会遇到各种各样的情况。建议你一开始不要想得太复杂,把基本的效果做出来再说,否则很有可能在一些非关键的问题上屡屡碰壁,最后半途而废。而且有时因为自己想得太复杂,遇到问题连想问人都没法问,因为表达不清楚。
如果只是抽奖的程序,学会了以上这些之后,要做出来应该没有什么大问题。如果你要搞什么附加的模块,那就另当别论了——比如用户帐号、联网、界面特效等等,我列举的知识点不足以支持实现这些功能,那需要更多的学习。
那么,最后说一下这种速成学习法的弊端。
很明显的,速成=基础不扎实,这简直就是自然而然的逻辑关系。
有可能出现的结果是:学习花的时间少,但写代码的效率低,花的时间多;一旦出现错误,不知道该如何排错;跟别人交流的时候,听不懂各种术语;代码不规范,别人不好帮你修改……等等。
要解决这些问题,只有一个途径,就是系统、正规地学习编程。但是这样一来,跟你这个问题的出发点就相差十万八千里了。这就好比,本来你只是想自己做一艘船。但想做一艘正儿八经的船,而不是玩具船,不是破破烂烂的船,那就要费不少功夫。从它的材料开始,精心培育树木、采集矿物、打制零件……如此涉及到整个制船业的知识。看起来,你并没有打算走那么深。
如果我仅仅告诉你速成的学习方法,感觉上有点儿像害人。因为对于学习编程来说,这不是一个好的开始。但如果我告诉你“乖乖从基础开始学起吧”,似乎又有点儿强行替你做决定的感觉。
总而言之,现在我把两个选项都告诉你了。
从基础开始系统地学习,这样比较正规,但也比较枯燥,可能你自学了半天也做不出什么像样的东西,然后最初的那股兴趣就渐渐消失了。不过,如果是这样,flash+as3的建议就不一定合适了,或许你要仔细考虑一下职业规划什么的,再决定发展的方向——这样的话,就是比较严肃的话题了。
速成的学习法,如果你悟性好的话,能比较快地掌握一些重点的知识,对编程有一个大概的了解(但是悟性不好的话,说不定反而会搞得更烦躁),很快地做出一些小成果出来。不感兴趣的话,那就这样了。感兴趣的话,再往后发展。基础的缺乏、不良的书写代码习惯,这些也是可以后来再补充、纠正的。如果你不确定要往编程这条路上深入发展(比如打算以码农为职业),倒也可以用这种方法玩票,能走多远算多远。
解决方案2:
网赛有很多模版。没必要自己做
解决方案3:
不知道你会那些语言啊 做桌面的一般用C# Web的用J2EE 至于什么编程软件 ,,,,,建议还是自己补一补知识把,这个我不知道怎么回答你 貌似你好象什么都不知道
帮你做了一个,不知是否满意呢?
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.util.Random;
import java.util.Vector;
public class Lottery extends Applet {
private static final long serialVersionUID = 1L;
int w,h;
Button ok,out,setup;
String[] msg;
TextField[] gaiLv;
TextField[] jiangPin;
int mx,ml;
int maxNum;
Random ran;
VectorInteger fist;
VectorInteger sec;
VectorInteger third;
VectorInteger lucky;
boolean lot=false;
boolean iserr=false;
boolean issetup=false;
String mesg="输入错误";
String priseMsg="继续努力!";
public void init(){
w=400;
h=220;
mx=20;
ml=40;
ran=new Random();
this.setSize(w, h);
this.setLayout(null);
ok=new Button("抽奖");
out=new Button("退出");
setup=new Button("确认设置");
msg=new String[4];
msg[0]="一等奖";
msg[1]="二等奖";
msg[2]="三等奖";
msg[3]="幸运奖";
gaiLv=new TextField[4];
jiangPin=new TextField[4];
for(int i=0;i4;i++){
gaiLv[i]=new TextField("0.0"+(i+1));
this.add(gaiLv[i]);
gaiLv[i].setBounds(mx+ml, 75+i*26, 60, 18);
jiangPin[i]=new TextField();
this.add(jiangPin[i]);
jiangPin[i].setBounds(mx+ml*3, 75+i*26, 80, 18);
}
this.add(ok);
ok.setBounds(260, 180, 60, 28);
ok.addActionListener(new LotButtonAction(this));
this.add(out);
out.setBounds(330, 180, 60, 28);
out.addActionListener(new LotButtonAction(this));
this.add(setup);
setup.setBounds(110, 180, 80, 24);
setup.addActionListener(new LotButtonAction(this));
}
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(new Color(230,255,230));
g.fillRect(0, 0, w, 30);
g.setColor(Color.BLUE);
g.drawString("JAVA抽奖系统", 130, 20);
g.setColor(Color.ORANGE);
g.drawRect(10, 40, 230, 170);
g.setColor(Color.BLACK);
g.drawString("设置", mx, 60);
g.drawString("概率", mx+ml, 60);
g.drawString("奖品", mx+ml*3, 60);
for(int i=0;imsg.length;i++){
g.setColor(new Color(255-(i*30),45,89));
g.drawString(msg[i], 20, 90+i*26);
}
if(lot==true){
g.setColor(new Color(ran.nextInt(255),ran.nextInt(255),ran.nextInt(255)));
if(priseMsg.length()=7){
g.drawString(priseMsg, 260, 100);
}else{
g.drawString(priseMsg.substring(0, 5), 260, 100);
g.drawString(priseMsg.substring(5), 260, 120);
}
}
if(iserr==true){
g.drawString(mesg, 260, 100);
}
}
public void getLucky(){
float firu=1;
float secu=1;
float thiu=1;
float fouu=1;
float minu=1;
if(gaiLv[0].getText().trim().length()1){
firu=Float.parseFloat(gaiLv[0].getText());
if(firu=0||firu=1){
iserr=true;
return;
}
if(firuminu){
minu=firu;
}
}
if(gaiLv[1].getText().trim().length()1){
secu=Float.parseFloat(gaiLv[1].getText());
if(secu=0||secu=1){
iserr=true;
return;
}
if(secuminu){
minu=secu;
}
}
if(gaiLv[2].getText().trim().length()1){
thiu=Float.parseFloat(gaiLv[2].getText());
if(thiu=0||thiu=1){
iserr=true;
return;
}
if(thiuminu){
minu=thiu;
}
}
if(gaiLv[3].getText().trim().length()1){
fouu=Float.parseFloat(gaiLv[3].getText());
if(fouu=0||fouu=1){
iserr=true;
return;
}
if(fouuminu){
minu=fouu;
}
}
if(minu=1||minu=0){
iserr=true;
return;
}
float aNum=1/minu;
maxNum=(int)aNum;
int count=(int)(firu/minu);
if(firu!=1){
fist=getLotteryVec(maxNum,count);
}else{
fist.removeAllElements();
}
count=(int)(secu/minu);
if(secu!=1){
sec=getLotteryVec(maxNum,count);
}else{
sec.removeAllElements();
}
count=(int)(thiu/minu);
if(thiu!=1){
third=getLotteryVec(maxNum,count);
}else{
third.removeAllElements();
}
count=(int)(fouu/minu);
if(fouu!=1){
lucky=getLotteryVec(maxNum,count);
}else{
lucky.removeAllElements();
}
issetup=true;
iserr=false;
}
protected VectorInteger getLotteryVec(int maxNum,int num){
VectorInteger result=new VectorInteger();
for(int i=0;inum;i++){
result.add(ran.nextInt(maxNum));
}
return result;
}
protected int getaNum(){
return ran.nextInt(maxNum);
}
public int isLucky(int pNum){
for(int i=0;ifist.size();i++){
if(fist.get(i)==pNum){
return 1;
}
}
for(int i=0;isec.size();i++){
if(sec.get(i)==pNum){
return 2;
}
}
for(int i=0;ithird.size();i++){
if(third.get(i)==pNum){
return 3;
}
}
for(int i=0;ilucky.size();i++){
if(lucky.get(i)==pNum){
return 4;
}
}
return -1;
}
public void ButtonActionPerformed(ActionEvent e){
String acName=e.getActionCommand();
if(acName.equals("抽奖")){
if(issetup==false){
priseMsg="请先设置参数!";
lot=true;
repaint();
lot=false;
return;
}
lot=true;
priseMsg=getResult(getaNum());
repaint();
// lot=false;
}else if(acName.equals("退出")){
this.setVisible(false);
this.stop();
this.destroy();
System.exit(0);
}else if(acName.equals("确认设置")){
lot=false;
getLucky();
repaint();
}
}
public String getResult(int num){
int resu=isLucky(num);
String result="";
switch(resu){
case -1:
result="继续努力!";
break;
case 1:
result="恭喜你!一等奖!\n获得"+jiangPin[0].getText();
break;
case 2:
result="恭喜你!二等奖!\n获得"+jiangPin[1].getText();
break;
case 3:
result="恭喜你!三等奖!\n获得"+jiangPin[2].getText();
break;
case 4:
result="恭喜你!幸运奖!\n获得"+jiangPin[3].getText();
break;
default:
result="继续努力!";
}
return result+num;
}
}
class LotButtonAction implements java.awt.event.ActionListener{
Lottery su;
public LotButtonAction(Lottery bun){
this.su=bun;
}
@Override
public void actionPerformed(ActionEvent e) {
su.ButtonActionPerformed(e);
}
}
public static void main(String[] args) {
int input = 10;
Scanner s = null;
ListStudent ls = new ArrayList();
ls.add(new Student("张3", '男'));
ls.add(new Student("张4", '女'));
ls.add(new Student("张5", '男'));
ls.add(new Student("张6", '男'));
ls.add(new Student("张7", '女'));
ls.add(new Student("张8", '男'));
ListStudent lscopy = new ArrayList();
// 由于不能重复中奖,所以抽一次就要把中奖的学生移除,所以不能在原list中操作。
lscopy.addAll(ls);
while (input != 0) {
System.out.println("选择:");
System.out.println("1:一等奖");
System.out.println("2:二等奖");
System.out.println("3:三等奖");
System.out.println("0:结束");
s = new Scanner(System.in);
input = s.nextInt();
switch (input) {
case 1:
// 随机出0-9 十个数字
int first = (int) (Math.random() * (lscopy.size() - 1));
System.out.println("一等奖:" + lscopy.get(first));
// 已经中奖的移除
lscopy.remove(first);
break;
case 2:
for (int i = 0; i 2; i++) {
int second = (int) (Math.random() * (lscopy.size() - 1));
System.out.println("二等奖:" + lscopy.get(second));
lscopy.remove(second);
}
break;
case 3:
for (int i = 0; i 3; i++) {
int third = (int) (Math.random() * (lscopy.size() - 1));
System.out.println("三等奖:" + lscopy.get(third));
lscopy.remove(third);
}
break;
}
}
}
自己看着改一下,没运行过不知道有没有错,大概就是这么个意思。你自己再写个学生类
//36中(1~36)选6位
for (int i = 1; i =6 ; i++)
{
int k = (int)((36-1+1)*Math.random()+1);
System.out.println(k);
if (k==0)
{
break;
}
}
//32中(1~32)选1位
int k = (int)((32-1+1)*Math.random()+1);
System.out.println(k);