From 2ef8b0fca1590fa0722b453a5af3408c353137fd Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Sat, 24 Aug 2013 11:16:15 +0200 Subject: [PATCH] Initial commit --- Grid.class | Bin 0 -> 8775 bytes Square.class | Bin 0 -> 805 bytes Words.class | Bin 0 -> 3884 bytes Words.java | 611 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 611 insertions(+) create mode 100644 Grid.class create mode 100644 Square.class create mode 100644 Words.class create mode 100644 Words.java diff --git a/Grid.class b/Grid.class new file mode 100644 index 0000000000000000000000000000000000000000..d902c49b875ce289cbc63fe967fc7e0ccba3973f GIT binary patch literal 8775 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 M9b56LI!kZf>eP}5lHNu#DIhA3yuxnLN|N^ zhzN-VAHYW;<~T`F3yaKLoyVN< z58kI<%t!HsiU%WhGv1WDyzr6@Z^(IaFZB9v$$fD`ex=fgH?21+9JpyblH&YHzr3Fn zLN9vVdD0vD{e)gaB|5s0PXY5?n#}gi*gu@TOCvw&PHvP&Dom3=MQAe4A^@E~21bPB zm@(tcn2~18R5NDSWZ7EA5;QdUdPny)o@ W(E7}1n9n4c(+78X_9B;axbz3)QG9X$ literal 0 HcmV?d00001 diff --git a/Words.class b/Words.class new file mode 100644 index 0000000000000000000000000000000000000000..2f6ab99a5468417a13d706a08f5f6d3e773949ed GIT binary patch literal 3884 zcmaJ^TX+-K5&qAyq+P97wpk;LA;toNEz81!q&TVVIDmtR8XE{E7y)Tm%WHW--ZiTg zCTUBOHciteZPQztUIJ}tp|>6~3%Y%qP9 zIp?3tnKNf*w0ir$SKdG!Hsfs>hK!HOI3wc;8Bfaigp8+Td{V~KGCn2a(=t9I<8v}T zFXM|cz9!?FGG3B#PR6%nd|SqMWc*0R%QAi<<24z-mhqO11sT_6{7%BhC451`mn3{e z!cQgqOu{7zmnD=W%u9G(!p|jKk#JSQFC<)(@P>q6D!3gZ3c3a9z^H;4_9)ndy$ZUp zPeBq7Du`phAY(#sAdC%oNa!6Dt8oPh98%DUjBs^W!B!j*f}=v^VX^wKf-QJNkYfr` z(1r4ZLixxFY*NL?a9ohQAdVn&f}9rQQ59dstRRo6coD9Ouj4rt-w+mO@mUq$#Yq+4 zLr%p7oKo?9Osn{TQ2C)y`7xeR@d{>C{0dVleuJWl-@;b$CO)F#_plhiP#5n?GeqNE zBggeqdP<*jQ@b5~cG}Dq`WaSM@Vsv2QhO(k8(H@zc+7Q7D@QQ-I>@jp-gV@N@6EHS ziUaYqkO$-Gv^aB>;LGVX$7`_+*?HUP7iNhi=*+Bb8J63>DC{A-0y1WTfR zK{0zbeELSs+S#7r(rv|Vc{H8&@x|A!X&x|6yE`01@4s0|+^>C6AjT=WTWUwvHEnB` zSbG`Ra0`tQv)~$*;ioBDR$3f`$acqa_|1`sQn(ov@wF_2(*u%Z^|BIAG_Z`QmXX?v z-QpPo@x$T(*254QFfG#^WLUdX&z{IRcF~%QdDRh%+p{83dcKPxFl0{}4APKYbWFpc zD!b2^5|*S;SgN_(F((-|3Kq*w>yDmv4JS55)e*Dw8Doj^vRVc6v87t7?~6RplQGnL z+iAnhP18>Cc5~*WJ59G45j$#`2&g`_2JrSF;oypGFMA3C^Ye^j4 zH>l^#Q^u{e8%Ipb*i)RDFq{MWM4s}pqL%!fo_7kNxrS9sl%Z?CJr~m{$5}gHoUvl2 zHEEo_MRxv=?oByT#^`0T#;_^E35}gB>JBX)AEz6~^x4_G;l@sF?b)V`JElu%^g@Vd zyJEwRZe?w=5F5@LMaOWHu^HXW$6Px$FjW@yO!=birsbG=&y+K$40-9CcHP;&RBCQ+ zZnI-&Pxe&gsWW8@g{G2-pg_;$@g6Y@DK*Q^u|}#CDyMyhL(ev2P!ZMXlSEe#^?SC` zkyMBiIZB{Sg;?)Bt)F#t+U=t@m@%ji7@8JueFtHJ{O6-Q ziPEdwMiv|YG7+&{beBNRYcoZ#N-KoLrrZgVS6F+e=rW>B>GCGEPfkRj`M*fs4O0F^ z7#gcTQDew2d|0Sjd${SWr43wZ{JA%uz zx>GR76d6;F#?Zib4bz0-A#QX>pIt_djoR1K45hsXJ6s!PANbr7B{WWaN)P=5LOQue1 z8p{N>6Juz)K*Gy%7ZC}aUwoHSSApn$_=-z%zcy?~W6+){2s{iRrE9y=q-=B-wO28YyA8w;>sg zL>o$YKm=SLZ3r9_!qhTCwJeNAk|pdWi#^f$v)B+-&!Ua8lgwx=sz&QW^SJvm2B}2` z>q_`gLet7og)}}&da+Dvur<^wwaU?OR1qCDxOpDiE@M|hTkAJg-*`e>Q4YCd0TK^TBKi|r%QE625)XM|QlqC3+XbYrqB}E>JNrZ*4=fMct6;JB~g14CtC zZ~+YoZ5@dQOAvvqYo$E(jn{g8f&OiQ{R0yFC+gY1u!j8y>)CsVv-gprzTM6_MtJ~- zc!(-e!W0iqv~wO-+7EN zzMeJkjjWw-VqLt0_47_P#JkypJjpD+nLWx=>@WOY_AaOB_zqsr-ld9vo`wv^m;VPaVE91* literal 0 HcmV?d00001 diff --git a/Words.java b/Words.java new file mode 100644 index 0000000..8b3c0ef --- /dev/null +++ b/Words.java @@ -0,0 +1,611 @@ +/****************************************************************************** + + Cross-Words applet v1.5 (c) Francois FLEURET + + This small applet is an interactive crosswords grid for web + pages. Mail for bug reports and + questions. + + In the past, I put his applet under a pure GPL licence. So, what was + expected to happen happened : commercial sites used it and I saw + people earning money with my work without giving me a single + buck. This is bad. So, now this software is distributed under the FFL + (Francois Fleuret Licence) which is the same as GPL version 2, plus + the following paragraph: + + * + * RESTRICTION OF USE FOR APPLET SOFTWARES + * + * 13 The site the applet is used on must be a NON-PROFIT site, which + * implies it does not contain banners or any other mean to make money + * (including indirectly, for example as an ISP portal). The name of + * all the authors of the software and a link to the URL they provide + * in the source code must appear on any web page that uses the + * applet. If the source code was modified, the modified source must + * be downloadable from the site the applet is used on. + * + + So, if you use this applet on a non-profit site, please add a link to + http://www-rocq.inria.fr/~fleuret and a short note indicating my name + as the author of the applet. For any other usage, please contact + me. Be sure we can make a deal for a reasonnable price. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + Sept 11th 2000, François Fleuret + +******************************************************************************/ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; +import java.lang.Object; + +class Square { + char solution; + char found; + boolean ajour; + boolean holdCursor; + boolean locked; + Color color; + + Square(char c) { + solution = c; + found = ' '; + ajour = false; + locked = false; + color = Color.black; + } + + void setFound(char c) { if(c != found) { found = c; ajour = false; } } + + void putCursor() { if(!holdCursor) ajour = false; holdCursor = true; } + + void remCursor() { if(holdCursor) ajour = false; holdCursor = false; } + + void lock(Color c) { + if(!locked) { + ajour = false; + locked = true; + color = c; + } + } +} + +class Grid extends Panel implements KeyListener, MouseListener { + int gridWidth, gridHeight; + int xCursor, yCursor; + int nbLetters, nbFound; + boolean cursorHorizontal; + + int xMargin, yMargin; + Square grid[][]; + Font font, smallFont; + FontMetrics fontMetrics, smallFontMetrics; + int squareSize; + + TextArea definitionArea; + String[][][] definitions; + + Grid(Font f, Font sf, + FontMetrics fm, FontMetrics sfm, + int w, int h, + String content, + TextArea ta, String def) { + + int x, y, xx, yy, k; + + font = f; fontMetrics = fm; + smallFont = sf; smallFontMetrics = sfm; + squareSize = fontMetrics.getHeight(); + + gridWidth = w; + gridHeight = h; + grid = new Square[gridWidth][gridHeight]; + + yMargin = smallFontMetrics.getHeight(); + xMargin = yMargin; + + nbLetters = 0; nbFound = 0; + k = 0; + for(y = 0; y 0) && ((def.indexOf(':', i) > j) || (def.indexOf(':', i) < 0))) { + direction = def.substring(i, j).toLowerCase(); + j++; + } else j = i; + + + i = j; + y = 0; + while((def.charAt(i) >= 'a') && (def.charAt(i) <= 'z')) + y = y*26 + ((int) def.charAt(i++)) - 'a'; + + x = 0; + while((def.charAt(i) >= '0') && (def.charAt(i) <= '9')) + x = x*10 + ((int) def.charAt(i++)) - '0'; + x--; + i++; + + j = def.indexOf('/', i); + if(j < 0) j = def.length(); + sd = def.substring(i, j); + j++; + + if(direction.equals("horizontal")) { + for(xx = x; (xx>=0) && (grid[xx][y].solution != '.'); xx--) + definitions[xx][y][0] = sd; + for(xx = x; (xx=0) && (grid[x][yy].solution != '.'); yy--) + definitions[x][yy][1] = sd; + for(yy = y; (yy=0) && (grid[xx][y].solution != '.'); xx--) { + grid[xx][y].setFound(grid[xx][y].solution); + grid[xx][y].lock(Color.red); + } + + for(xx = x; (xx=0) && (grid[x][yy].solution != '.'); yy--) { + grid[x][yy].setFound(grid[x][yy].solution); + grid[x][yy].lock(Color.red); + } + + for(yy = y; (yy=0) && (grid[xmin][y].solution != '.'); xmin--) + ok &= (grid[xmin][y].solution == grid[xmin][y].found); + + for(xmax = x; ok && (xmax=0) && (grid[x][ymin].solution != '.'); ymin--) + ok &= (grid[x][ymin].solution == grid[x][ymin].found); + + for(ymax = y; ok && (ymax 0) && (grid[xCursor][y].solution == '.')) y--; + if((y >= 0) && (grid[xCursor][y].solution != '.')) { + grid[xCursor][yCursor].remCursor(); + yCursor = y; + grid[xCursor][yCursor].putCursor(); + } + } + else if(code == KeyEvent.VK_DOWN) { + y = yCursor+1; + while((y < gridHeight-1) && (grid[xCursor][y].solution == '.')) y++; + if((y < gridHeight) && (grid[xCursor][y].solution != '.')) { + grid[xCursor][yCursor].remCursor(); + yCursor = y; + grid[xCursor][yCursor].putCursor(); + } + } + else if(code == KeyEvent.VK_LEFT) { + x = xCursor-1; + while((x > 0) && (grid[x][yCursor].solution == '.')) x--; + if((x >= 0) && (grid[x][yCursor].solution != '.')) { + grid[xCursor][yCursor].remCursor(); + xCursor = x; + grid[xCursor][yCursor].putCursor(); + } + } + else if(code == KeyEvent.VK_RIGHT) { + x = xCursor+1; + while((x < gridWidth-1) && (grid[x][yCursor].solution == '.')) x++; + if((x < gridWidth) && (grid[x][yCursor].solution != '.')) { + grid[xCursor][yCursor].remCursor(); + xCursor = x; + grid[xCursor][yCursor].putCursor(); + } + } + else if(code == Event.ENTER) { + cursorHorizontal = !cursorHorizontal; + grid[xCursor][yCursor].ajour = false; + } + else if(code == Event.BACK_SPACE) { + if((grid[xCursor][yCursor].found == ' ') || grid[xCursor][yCursor].locked) { + if(cursorHorizontal) { + if(xCursor > 0) + if(grid[xCursor - 1][yCursor].solution != '.') { + grid[xCursor][yCursor].remCursor(); + xCursor--; + grid[xCursor][yCursor].putCursor(); + } + } else { + if(yCursor > 0) + if(grid[xCursor][yCursor - 1].solution != '.') { + grid[xCursor][yCursor].remCursor(); + yCursor--; + grid[xCursor][yCursor].putCursor(); + } + } + } + + if(!grid[xCursor][yCursor].locked) { + if(grid[xCursor][yCursor].found == grid[xCursor][yCursor].solution) + nbFound--; + grid[xCursor][yCursor].setFound(' '); + } + } else if(key == ' ') { + if(definitionArea != null) { + if(cursorHorizontal) definitionArea.setText(definitions[xCursor][yCursor][0]); + else definitionArea.setText(definitions[xCursor][yCursor][1]); + } + } else if((key >= 'a') && (key <= 'z')) { + if(!grid[xCursor][yCursor].locked) { + if(grid[xCursor][yCursor].found == grid[xCursor][yCursor].solution) + nbFound--; + grid[xCursor][yCursor].setFound((char) key); + if(grid[xCursor][yCursor].found == grid[xCursor][yCursor].solution) + nbFound++; + } + + if(cursorHorizontal) { + if(xCursor < gridWidth-1) + if(grid[xCursor + 1][yCursor].solution != '.') { + grid[xCursor][yCursor].remCursor(); + xCursor++; + grid[xCursor][yCursor].putCursor(); + } + } else { + if(yCursor < gridHeight-1) + if(grid[xCursor][yCursor + 1].solution != '.') { + grid[xCursor][yCursor].remCursor(); + yCursor++; + grid[xCursor][yCursor].putCursor(); + } + } + + if(nbFound == nbLetters) { + for(y = 0; y= gridWidth) xc = gridWidth-1; + yc = (mouseEvent.getY()-yMargin)/squareSize; + if(yc < 0) yc = 0; + if(yc >= gridHeight) yc = gridHeight-1; + + if(grid[xc][yc].solution != '.') { + grid[xCursor][yCursor].remCursor(); + xCursor = xc; yCursor = yc; + grid[xCursor][yCursor].putCursor(); + } + + repaint(); + } + + public void mouseClicked(MouseEvent mouseEvent) {} + public void mouseReleased(MouseEvent e) {} + public void mouseEntered(MouseEvent e) {} + public void mouseExited(MouseEvent e) {} + + public Dimension getPreferredSize() { + return new Dimension(xMargin + gridWidth*squareSize + 1, + yMargin + gridHeight*squareSize + 1); + } + +} + +public class Words extends Applet implements ActionListener { + Grid grid; + Button checkButton, giveButton; + TextArea definitionArea; + + public void init() { + String fontName, s, definitionString; + int fontSize; + + Font f, sf; + FontMetrics fm, sfm; + int w, h, wd, hd; + + s = getParameter("bgcolor"); + if(s != null) + setBackground(new Color(Integer.parseInt(s))); + + fontName = getParameter("font"); + if(fontName == null) fontName = "Courier"; + + s = getParameter("fontsize"); + if(s == null) fontSize = 48; else fontSize = Integer.parseInt(s); + + f = new Font(fontName, Font.PLAIN, fontSize); + + fm = getGraphics().getFontMetrics(f); + + fontName = getParameter("smallfont"); + if(fontName == null) fontName = "Courier"; + + s = getParameter("smallfontsize"); + if(s == null) fontSize = 20; else fontSize = Integer.parseInt(s); + + sf = new Font(fontName, Font.ITALIC, fontSize); + sfm = getGraphics().getFontMetrics(sf); + + s = getParameter("gridwidth"); + if(s == null) w = 1; else w = Integer.parseInt(s); + + s = getParameter("gridheight"); + if(s == null) h = 1; else h = Integer.parseInt(s); + + definitionString = null; + + s = getParameter("definitions"); + + if(s != null) { + int i, j; + wd = -1; hd = -1; + + // Find the width and the height + i = 0; j = s.indexOf('x', i); + wd = Integer.parseInt(s.substring(i, j)); + i = j+1; j = s.indexOf('/', i); + hd = Integer.parseInt(s.substring(i, j)); + + i = j+1; definitionString = s.substring(i, s.length()); + + if((wd > 0) && (hd > 0)) { + definitionArea = new TextArea("", hd, wd, TextArea.SCROLLBARS_NONE); + definitionArea.setEditable(false); + } + } + + s = getParameter("content"); if(s == null) s = "."; + grid = new Grid(f, sf, fm, sfm, w, h, s, definitionArea, definitionString); + add("north", grid); + + s = getParameter("checkwordlabel"); + if(s != null) { + checkButton = new Button(s); + checkButton.addActionListener(this); + } + + s = getParameter("givewordlabel"); + if(s != null) { + giveButton = new Button(s); + giveButton.addActionListener(this); + } + + if((checkButton != null) || (giveButton != null)) { + Panel buttonPanel; + buttonPanel = new Panel(); + if(checkButton != null) buttonPanel.add(checkButton); + if(giveButton != null) buttonPanel.add(giveButton); + if(definitionArea != null) add("south", definitionArea); + add("south", buttonPanel); + } + } + + public void actionPerformed(ActionEvent event) { + Object source = event.getSource(); + if(source == checkButton) grid.checkWord(); + else if(source == giveButton) grid.giveWord(); + } + + public String getAppletInfo() { + return "Word applet v1.5\n" + + "Written and (c) Francois Fleuret, mail to \n" + + "Check http://www-rocq.inria.fr/~fleuret\n"; + } + + public String[][] getParameterInfo() { + String chose[][] = { + { "bgcolor", "integer", "Background Color (optional)" }, + { "font", "font name", "Grid character font name (optional)" }, + { "fontsize", "integer", "Grid character font size (optional)" }, + { "smallfont", "font name", "Row and column index font name (optional)" }, + { "smallfontsize", "integer", "Row and column index font size (optional)" }, + { "gridwidth", "integer", "Grid width" }, + { "gridheight", "integer", "Grid height" }, + { "content", "string", "Grid content" }, + { "definitions", "string", "Definitions (optional)" }, + { "checkwordlabel", "string", "Label for the 'check word' button (optional)" }, + { "givewordlabel", "string", "Label for the 'give word' button (optional)" } + }; + + return chose; + } +} + -- 2.20.1